偏函數:java
偏函數是functools模塊提供的一個功能,偏函數能夠經過設定參數的默認值,下降函數調用的難度python
其中設定的參數默認值其實是能夠被傳入爲其餘值的,最後建立偏函數時可接收函數對象、*args、編程
**kw三個參數函數
import functools functools.partial(int,*args/**kw)
Python模塊章節:模塊是一組python代碼的集合,可使用其餘模塊,也能夠被其餘模塊使用。設計
常見本身的模塊時要注意:模塊名要遵循Python變量命名規範,不要使用中文、特殊字符;對象
模塊名不要和系統模塊名衝突,能夠在python交互環境執行import abc,如果成功則說明系統存blog
在這個模塊。(模塊實際上就是一個.py文件)繼承
使用模塊:知道導入模塊,而後就能夠調用模塊中的函數了,模塊中的函數有些是不想公開的,接口
不該該被直接引用,相似_xxx和__xxx這樣的函數就是非公開的,因此在定義函數的時候能夠將get
私有函數,實際上python也沒有一種肯定方法來顯示函數的引用,因此只能從變成習慣上來控制
因此能夠在定義函數時經過在模塊中利用公開函數去調用私有函數,這樣外部使用的時候就不用
關心私有函數細節,造成一種封裝的效果,通常的習慣是外部不須要的函數所有定義爲private,
只有外部須要的函數才定義爲public。
安裝第三方模塊:下載安裝就能夠了,Anaconda比較好。
面向對象編程:類和實例,舉一個例子就是鳥是一個類,可是一隻鳥就是一個實例,每一個實例
數據互相獨立,方法是和實例綁定的函數,方法能夠直接訪問實例的數據。定義好一個類以後,
能夠建立實例,依靠類名+()實現。
訪問限制:在class內部的方法和屬性,能夠被外部代碼自由修改,爲了不,可讓內部的屬性
私有化,在實例屬性前加上雙下劃線,屬性就變成僅供內部訪問,外部不能訪問,此時就要利用
get和set方法去訪問和操做屬性。python中變量名相似__xxx__的,是特殊變量。一個下劃線開頭
的實例變量名是能夠被外部訪問的,可是這種表達方式自己的意義就是雖然自身能夠被訪問,但
是請不要隨意訪問並但願被視爲私有變量。不能訪問的__xxx是由於python解釋其把變量名修改爲
_(類名)__xxx,因此依然是能夠被訪問的,因此python是沒有機制去阻止的,一切都靠本身自覺。
繼承和多態:大概意思和java中相似,而後的話有一個不一樣點就是,多態在python中的體現跟java
裏面不同,好比定義一個run(x)函數,x在java中是須要指定數據類型的,可是在python中是
沒有一個肯定的數據類型的,x能夠是任意的數據類型,只要該類中定義了run中的方法,就能夠調用
run()方法並使用。
獲取對象信息:有三種方法,使用type(),返回參數相應的類型;使用isinstance(),用來判斷一個class
是否爲某一特定類型;使用dir(),能夠得到一個對象的全部屬性和方法,配合getattr(obj,'xxx',404)、setattr()、hasattr()
方法能夠直接操做一個對象的狀態。obj爲對象,xxx是須要確認的東西,404爲返回值,在setattr中第三
個爲我的設定值。
實例屬性和類屬性:實例屬性是屬於各自的,互不干擾;類屬性是類共有的,全部實例共享一個屬性。
面向對象高級編程:使用__slots__:因爲python語言的動態性,能夠給一個實例綁定任何屬性和方法,
也能夠給類綁定方法,爲了不這種狀況,就可使用__slots__變量,在類中定義gg
class Student(object): __slots__ = ('name','age') #用tuple定義容許綁定的屬性名稱
這樣就能夠指定綁定的屬性,可是這樣對子類是沒有影響的,若是子類也定義了子類就共享父類的綁定
使用@property:在類中,爲了限制一個參數的輸入範圍能夠在setter方法中添加限制條件,這樣參數
的賦值就不能那麼隨意了,可是直接操做會使得代碼沒那麼美觀優雅,用@property能夠變得簡單,
class Student(object): @property def birth(self): return self._birth @birth.setter def birth(self, value): self._birth = value @property def age(self): return 2015 - self._birth
用@property能夠把一個getter()方法變成屬性,另外一個@score.setter裝飾器把setter方法變成屬性賦值,
若是隻定義getter()方法不定義setter()方法,該屬性就變成一個只讀屬性。
class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value >>> s = Student() >>> s.score = 60 # OK,實際轉化爲s.set_score(60) >>> s.score # OK,實際轉化爲s.get_score() 60 >>> s.score = 9999 Traceback (most recent call last): ... ValueError: score must between 0 ~ 100!
多重繼承:感受相似java接口,能夠實現不一樣的功能,不過不一樣的是這個是利用一個繼承的方式來實現功能
,MixIn是一種常見的設計,選擇組合不一樣的類功能,能夠快速構造出符合需求的子類。