歡迎光臨
每天分享高質量文章

從事Python開發五年,總結了一份超詳細的Python學習指南給你!

*全文較長,大約需要10-20分鐘看完,代碼可左右滑動查看

背景

PHP的$和->讓人輸入的手疼(PHP確實非常簡潔和強大,適合WEB編程),Ruby的#、@、@@也好不到哪裡(OO人員最該學習的一門語言)。

Python應該是寫起來最舒服的動態語言了,一下是一些讀書筆記,最後會介紹一下高級的用法:Mixin、Open Class、Meta Programming和AOP。

文中有些地方是用2.7開發的,如果您安裝的是3.x,有幾點需要註意:

  • print “xxx” 要換成 print(“xxx”)
  • __metaclass__ = type 刪除掉。

型別和運算式部分

你好,世界!

# coding=utf-8
print "你好,世界。"

乘方

print 2**10

變數

var = 1
print var
var = "段光偉"
print var

註:這裡的var = xxxx不叫變數賦值,而叫變數系結,python維護了一個符號表(變數名)以及符合對應的值,這個對應關係就叫做系結,一個符號可以系結任意型別的值。

獲取用戶輸入

#獲取用戶輸入
x = input("x:")
y = input("y:")
print x*y

註:input接受的是Python代碼,輸入中可以訪問當前執行環境中的變數,如果想獲取原始輸入需要使用 raw_input。

函式定義

def say_b():
 print "b"

強型別

Javascript和Php是弱型別的,Python和Ruby是強型別的。弱型別允許不安全的型別轉換,強型別則不允許。

#1 + “1” 這行代碼在Python中會報錯。
print 1 + int("1")
print str(1) + "1"

字串

#字串
print '''' 段
 光
 偉'''
print r'C:\log.txt'
print 'C:\\log.txt'

序列

這裡先介紹三種序列:串列、元祖和字串。

序列通用操作

可變的串列

不可變的元祖

print (1, 2) #元祖以小括號形式宣告。
print (1,) #一個元素的元祖。

字串格式化

字典

  •  

print 陳述句

序列解包

bool值

bool運算

陳述句塊

:開始陳述句快,縮進的所有內容都是一個陳述句塊。

三元運算子

print("10 > 1" if 10 > 1 else "不可能發生")

相等比較

迴圈

函式部分

形參和引數之間是按值傳遞的,當然有些型別的值是取用(物件、串列和字典等)。

作用域

模塊

幾個模塊相關的規則:

  • 一個檔案代表一個模塊。
  • 可以用import module匯入模塊,也可以用form module import member匯入模塊的成員。
  • 如果匯入的是module,必須使用module.member進行訪問;如果匯入的member,可以直接訪問member。
  • 匯入的module或member都會變成當前module的member。
  •  

  •  

  •  

輸出

b

a

__main__

a

b

b

異常管理

面向物件

先上一張圖

幾個規則:

  1. 一切都是物件,python中一切都是物件,每個物件都包含一個__class__屬性以標記其所屬型別。
  2. 每個物件(記得一切都是物件啊)都包含一個__dict__屬性以儲存所有屬性和方法。
  3. 每個型別都包含一個__bases__屬性以標記其父類。
  4. 屬性和方法的訪問規則:依次搜索instance、子類、父類、父類的父類、直到object的__dict__,如果找到就傳回。
  5. 屬性和方法的設置規則:直接設置instance.__dict__。
  6. 以上屬性和方法訪問或設置規則沒有考慮“魔法方法”,下文會解釋。

示例

系結方法和未系結方法

系結方法已經系結了物件示例,呼叫的時刻不用也不能傳入self引數了。

註:使用物件訪問實體方法為何會傳回系結方法?這個還得等到學完“魔法方法”才能解釋,內部其實是攔截對方法成員的訪問,傳回了一個Callable物件。

私有成員

難怪訪問不了了,名稱已經被修改了,增加了訪問的難度而已。

多重繼承

如果繼承的多個型別之間有重名的成員,左側的基類優先級要高,上例子Base2會勝出。

接口那裡去了,鴨子型別比接口更好用。

呼叫父類

魔法方法

詳細內容參考:http://www.rafekettler.com/magicmethods.html

物件構造相關:__new__、__init__、__del__。

運算子多載:所有運算子都能多載。

屬性訪問。

集合實現。

可呼叫物件,像方法一樣呼叫物件。

資源管理

物件描述符。

摻入模塊:playable.py

摻入標的模塊:test.py

Open Class(打開型別,從新定義成員)

Meta Programming(元編程)

備註

Python在作用域方面非常接近Javascript,型別和物件系統也有幾份相似(雖然Javascript是基於原型的),Javascript、PHP、Python和Ruby這幾門語言交叉學習會帶來意想不到的收穫。

    已同步到看一看
    赞(0)

    分享創造快樂