手寫一個完整的裝飾器模版 # 用於修複被裝飾對象的名稱空間 from functools import wrape def wrapper(func): @wraps(func) def inner(*args, **kwargs): # func執行之前的操作 res = func(*args, ...
手寫一個完整的裝飾器模版
# 用於修複被裝飾對象的名稱空間
from functools import wrape
def wrapper(func):
@wraps(func)
def inner(*args, **kwargs):
# func執行之前的操作
res = func(*args, **kwargs)
# func執行之後的操作
return res
return inner
簡述面向對象三大特性及各自特點
'''
封裝:將屬性和方法放在類的內部,通過類的實例化出對象,用對象訪問屬性或方法,隱藏功能的實現細節,可設置訪問許可權
好處:提高了代碼的復用性,安全性,降低代碼的冗餘度
繼承:實現代碼的重用,也可以理解為讓類與類之間建立父子關係,使子類擁有父類的屬性和方法,並可衍生出自己獨有的屬性和方法。需要註意的是,在python中存在多繼承,這是其他編程語言沒有的一個特性
好處:減少代碼的重用,提高代碼的可讀性,規範編程模式
多態:同一個方法,不同對象調用,實現的功能不一樣。python中的多態不像其他編程語言,崇尚“鴨子類型”,即不用通過具體的繼承關係來約束其他類,只要這些不同的類具有相同的方法名,利用統一的方式來調用
好處:增加代碼的靈活度,調用方法,不會影響到類的內部設計
'''
簡述解釋性語言和編譯性的區別
'''
- 解釋型:每次執行程式都要重新編譯,降低了執行效率,但提供相應的解釋器後,跨平臺比較容易,調試方便,比如說Python,JavaScript、C#
- 編譯型:一次編譯,重覆執行,執行效率相對較高,但由於編譯成特定的機器碼,導致跨平臺性差,調試麻煩,比如C,C++,PHP
總結:
解釋型語言,執行速度慢、效率低;依靠解釋器、跨平臺性好
編譯型語言,執行速度快、效率高;依靠編譯器、跨平臺性較差
java語言(瞭解)
可以說是編譯型,所有的java代碼都要編譯,不經過編譯啥也沒有;
也可以說是解釋型,java代碼編譯後不能直接運行,在jvm上解釋運行
由於java對於多種不同的操作系統有不同的jvm,所以java實現了真正意義上的跨平臺
'''
列舉你所知道的python2與python3之間的區別
# 參照https://www.cnblogs.com/zengyi1995/p/10736673.html
# 參照https://www.cnblogs.com/xiaoyuanqujing/articles/11721989.html
'''
1.解釋器預設編碼
python2:ASCII
python3:utf-8
2.str(字元串)的區別
python2:Unicode類型表示字元串序列,str類型表示位元組序列
python3:str類型表示字元串序列,byte類型表示位元組序列
3.輸入
python2:raw_input('請輸入用戶名:')
python3:input('請輸入用戶名') # 等價於python2中的raw_input
ps:python2中的input()必須指定數據類型,否則會拋異常
4.輸出
python2:
print('hello', 'world') # 結果:('hello','world')
print '你好' # 結果:你好
python3:
print('hello', 'world') # 結果:hello world
print('你好') # 結果:你好
5.數字的表示
python2:64位機器,範圍-2^63~2^63-1;超出這個範圍,自動轉換成long(長整型)
python3:所有整型都是int,沒有long(長整型)
6.整除:1/2的結果
python2:0 只保留整數位
python3:0.5 保留所有內容
7.range/xrange
python2:
range:在記憶體中立即把所有的值創建
xrange:不會在記憶體中立即創建,邊迴圈邊創建
python3:
range:不會在記憶體中立即創建,邊迴圈邊創建,等價於python2中的xrange
沒有xrange
8.dict(字典)的keys/values/items方法
python2:返回列表,可通過索引取值
python3:返回類,只能通過迴圈取值
9.新式類和經典類
python2:沒有繼承Object類的類是經典類,繼承了Object類的類是新式類
python3:預設所有類都繼承Object類,只有新式類,沒有經典類
ps:
新式類:廣度優先,遵循mro
經典類:深度優先,不遵循mro
10.global和nonlocal
python2:使用關鍵字global聲明某個變數為全局變數,但嵌套函數中,聲明某個變數為非局部變數無法實現
python3:除了global關鍵字,新增了關鍵字nonlocal,實現了嵌套函數中,聲明某個變數為非局部變數
'''
什麼是匿名函數。匿名函數一般結合什麼一起使用,請列舉幾個常用的
'''
不用顯式定義的函數,即沒有函數名的函數,通過lambda關鍵字表示。本身沒有任何意義,就是一個表達式,一般結合內置函數使用,比如max,min,sorted,map,reduce,filter
ps:
max(可迭代對象, key=函數對象):根據函數對象返回結果為依據,返回可迭代對象中的最大值
min(可迭代對象, key=函數對象):根據函數對象返回結果為依據,返回可迭代對象中的最小值
sorted(可迭代對象, [key=函數對象], [reverse=True]):根據函數對象返回的結果作為依據(可選),對可迭代對象進行排序,預設為升序,reverse=True表示結果為降序(該參數可選)
map(函數對象,可迭代對象):將可迭代對象中的元素依次通過函數對象修改後,依次映射到map對象中,通過轉換成容器類型的數據展示,只能轉換一次
reduce(函數對象, 可迭代對象, [初始值]):使用前,導包→from functools import reduce;每次從可迭代對象中獲取兩個元素進行累積計算,即reduce(func,[1,2,3]) 等價於 func(func(1,2),3)。如果求和,初始值預設為0,求乘積時,初始值為1(該參數可選)
filter(函數對象, 可迭代對象)根據函數對象中的返回值是True還是False決定保留還是丟棄可迭代對象中的元素,如果該元素在函數對象中的結果為True,則添加到filter對象中,通過轉換成容器類型數據展示,只能轉換一次
'''