php的$和->讓人輸入的手疼(php确實非常簡潔和強大,适合web程式設計),ruby的#、@、@@也好不到哪裡(oo人員最該學習的一門語言)。
python應該是寫起來最舒服的動态語言了,一下是一些讀書筆記,最後會介紹一下進階的用法:mixin、open class、meta programming和aop。
文中有些地方是用2.7開發的,如果您安裝的是3.x,有幾點需要注意:
print "xxx" 要換成 print("xxx")
__metaclass__ = type 删除掉。
你好,世界!
乘方
變量
注:這裡的var = xxxx不叫變量指派,而叫變量綁定,python維護了一個符号表(變量名)以及符合對應的值,這個對應關系就叫做綁定,一個符号可以綁定任意類型的值。
擷取使用者輸入
注:input接受的是python代碼,輸入中可以通路目前執行環境中的變量,如果想擷取原始輸入需要使用 raw_input。
函數定義
強類型
javascript和php是弱類型的,python和ruby是強類型的。弱類型允許不安全的類型轉換,強類型則不允許。
字元串
序列
這裡先介紹三種序列:清單、元祖和字元串。
序列通用操作
可變的清單
不可變的元祖
字元串格式化
字典
print 語句
序列解包
bool值
bool運算
語句塊
:開始語句快,縮進的所有内容都是一個語句塊。
三元運算符
相等比較
循環
pass、exec和eval
形參和實參之間是按值傳遞的,當然有些類型的值是引用(對象、清單和字典等)。
幾個子產品相關的規則:
一個檔案代表一個子產品。
可以用import module導入子產品,也可以用form module import member導入子產品的成員。
如果導入的是module,必須使用module.member進行通路;如果導入的member,可以直接通路member。
導入的module或member都會變成目前module的member。
b.py
a.py
test.py
輸出
先上一張圖

幾個規則:
一切都是對象,python中一切都是對象,每個對象都包含一個__class__屬性以标記其所屬類型。
每個對象(記得一切都是對象啊)都包含一個__dict__屬性以存儲所有屬性和方法。
每個類型都包含一個__bases__屬性以标記其父類。
屬性和方法的通路規則:依次搜尋instance、子類、父類、父類的父類、直到object的__dict__,如果找到就傳回。
屬性和方法的設定規則:直接設定instance.__dict__。
以上屬性和方法通路或設定規則沒有考慮“魔法方法”,下文會解釋。
示例
綁定方法和未綁定方法
綁定方法已經綁定了對象示例,調用的時刻不用也不能傳入self參數了。
注:使用對象通路執行個體方法為何會傳回綁定方法?這個還得等到學完“魔法方法”才能解釋,内部其實是攔截對方法成員的通路,傳回了一個callable對象。
私有成員
難怪通路不了了,名稱已經被修改了,增加了通路的難度而已。
多重繼承
如果繼承的多個類型之間有重名的成員,左側的基類優先級要高,上例子base2會勝出。
接口那裡去了,鴨子類型比接口更好用。
調用父類
詳細内容參考:http://www.rafekettler.com/magicmethods.html。
對象構造相關:__new__、__init__、__del__。
運算符重載:所有運算符都能重載。
屬性通路。
集合實作。
可調用對象,像方法一樣調用對象。
資源管理
對象描述符。
摻入子產品:playable.py
摻入目标子產品:test.py
python在作用域方面非常接近javascript,類型和對象系統也有幾份相似(雖然javascript是基于原型的),javascript、php、python和ruby這幾門語言交叉學習會帶來意想不到的收獲。·