廖雪峰python摘錄6
1 def now(): 2 print(‘hello‘) 3 4 import functools 5 6 def log(func): 7 @functools.wraps(func) 8 def wrapper(*args,**kw): 9 print(‘begin call %s():‘% func.__name__) 10 func_tmp=func(*args,**kw) 11 print(‘end call %s():‘% func.__name__) 12 returnfunc_tmp 13 return wrapper
2、簡單總結functools.partial
的作用就是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單。
3、
使用模塊有什麽好處?
最大的好處是大大提高了代碼的可維護性。其次,編寫代碼不必從零開始。當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。
使用模塊還可以避免函數名和變量名沖突。相同名字的函數和變量完全可以分別存在不同的模塊中,因此,我們自己在編寫模塊時,不必考慮名字會與其他模塊沖突。但是也要註意,盡量不要與內置函數名字沖突。點這裏查看Python的所有內置函數。
你也許還想到,如果不同的人編寫的模塊名相同怎麽辦?為了避免模塊名沖突,Python又引入了按目錄來組織模塊的方法,稱為包(Package)。
4、常的函數和變量名是公開的(public),可以被直接引用,比如:abc
,x123
,PI
等;
類似__xxx__
這樣的變量是特殊變量,可以被直接引用,但是有特殊用途,比如上面的__author__
,__name__
就是特殊變量,hello
模塊定義的文檔註釋也可以用特殊變量__doc__
訪問,我們自己的變量一般不要用這種變量名;
類似_xxx
和__xxx
這樣的函數或變量就是非公開的(private),不應該被直接引用,比如_abc
,__abc
等;
5、
我們在模塊裏公開greeting()
函數,而把內部邏輯用private函數隱藏起來了,這樣,調用greeting()
函數不用關心內部的private函數細節,這也是一種非常有用的代碼封裝和抽象的方法,即:
外部不需要引用的函數全部定義成private,只有外部需要引用的函數才定義為public。
6、面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,比如Student類,而實例是根據類創建出來的一個個具體的“對象”,每個對象都擁有相同的方法,但各自的數據可能不同。
7、class
後面緊接著是類名,即Student
,類名通常是大寫開頭的單詞,緊接著是(object)
,表示該類是從哪個類繼承下來的,繼承的概念我們後面再講,通常,如果沒有合適的繼承類,就使用object
類,這是所有類最終都會繼承的類。 可以自由地給一個實例變量綁定屬性,比如,給實例bart
綁定一個name
屬性。
8、由於類可以起到模板的作用,因此,可以在創建實例的時候,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__
方法,在創建實例的時候,就把name
,score
等屬性綁上去。
9、由於類可以起到模板的作用,因此,可以在創建實例的時候,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__
方法,在創建實例的時候,就把name
,score
等屬性綁上去。
10、如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__
,在Python中,實例的變量名如果以__
開頭,就變成了一個私有變量(private),只有內部可以訪問,外部不能訪問。
11、繼承有什麽好處?最大的好處是子類獲得了父類的全部功能。由於Animial
實現了run()
方法,因此,Dog
和Cat
作為它的子類,什麽事也沒幹,就自動擁有了run()
方法:
12、當子類和父類都存在相同的run()
方法時,我們說,子類的run()
覆蓋了父類的run()
,在代碼運行的時候,總是會調用子類的run()
。這樣,我們就獲得了繼承的另一個好處:多態。 新增一個Animal
的子類,不必對run_twice()
做任何修改,實際上,任何依賴Animal
作為參數的函數或者方法都可以不加修改地正常運行,原因就在於多態。
13、如果要獲得一個對象的所有屬性和方法,可以使用dir()
函數,它返回一個包含字符串的list
14、
廖雪峰python摘錄6