天天看點

Python:Python學習總結

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:Python學習總結

幾個規則:

一切都是對象,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這幾門語言交叉學習會帶來意想不到的收獲。·