函數(shù)-裝飾器基礎(chǔ)知識(shí)+推導(dǎo)式
裝飾器:????在不改變?cè)瘮?shù)代碼基礎(chǔ)上,為原函數(shù)擴(kuò)展功能
????不帶參數(shù)的裝飾器
裝飾器格式:
##裝飾器的編寫(xiě)(函數(shù)的嵌套,外城函數(shù)返回內(nèi)城函數(shù)):
def wrapper (funk):
def inner (*args,**kwags):
#自定義共能,根據(jù)功能在funk函數(shù)執(zhí)行前后展現(xiàn)對(duì)應(yīng)將其放在funk()前后
pass(自定義功能)
data = funk(*args,**kwargs)
return data #調(diào)用被裝飾的函數(shù)并返回其值
#若是return funk 是返回funk代指的函數(shù)
return inner
##裝飾器的使用:
@wrapper #@外層函數(shù)
def index(*args,**kwargs):
pass
index()
@wrapper:1.執(zhí)行wrapper函數(shù)以index函數(shù)為參數(shù)(即func指向index):wrapper(index)
??????2.執(zhí)行完外城函數(shù)后將內(nèi)城函數(shù)返回,賦值給index變量,此時(shí)index不在指向原先指向的函數(shù),而是指向內(nèi)層函數(shù)
?????帶參數(shù)的裝飾器

推導(dǎo)式:
????列表推導(dǎo)式: v = [for循環(huán)中的變量 for循環(huán)一個(gè)可迭代對(duì)象]??中間沒(méi)有用逗號(hào)隔開(kāi) eg:v = [i for i in range(10)]
???????????v = [for循環(huán)中的變量 for循環(huán)一個(gè)可迭代對(duì)象 if條件]??if條件滿足加到列表中?????eg: v = [i for i in range(10) if i>10]
????????????
面試題1:
v = [lambda x:x*i for i in range(10)]
v[0](2)
print(v) #v列表里面放著10個(gè)匿名函數(shù),沒(méi)有被執(zhí)行且i循環(huán)完后為9
print(v[0](2)) #執(zhí)行匿名函數(shù)且參數(shù)x = 2 >>>18
面試題2:
def num():
return [lambda x:x*i for i in range(4)]
v = [m(2) for m in num()] #調(diào)用num得到含有匿名函數(shù)的列表且i=3,for循環(huán)此列表,m(2)作為列表v的元素
print(v)>>>[6, 6, 6, 6]
?????集合推導(dǎo)式: v = {for循環(huán)中的變量 for循環(huán)一個(gè)可迭代對(duì)象 條件} 得到一個(gè)集合
?????列表推導(dǎo)式: v = {"k" + str(i) : i for i in range(10) if i%2== 0} #“k"+str(i) 是字符串的拼接??????#注意集合,字典中不是所有數(shù)據(jù)類(lèi)型都能作其元素
浙公網(wǎng)安備 33010602011771號(hào)