#裝飾器
'''#第一步:基本函式
def chiji():
print('吃雞真得勁~~')
#呼叫函式
chiji()
#第二步:擴充套件功能(不能直接修改原來的函式)
def zhuangshi(func):
print('吃雞之前,左手摸雞~')
func()
print('吃雞之後,右手搖雞~')
def chiji():
print('吃雞真得勁~~')
chiji = zhuangshi(chiji)
print(chiji)
#第三步:實現基本裝飾器功能
def zhuangshi(func):
def inner():
print('吃雞之前左手摸雞')
func()
print('吃雞之後右手搖雞')
return inner
def chiji():
print('吃雞真得勁~')
chiji = zhuangshi(chiji)
chiji()
chiji()
#第四步:語法糖方式實現裝飾器
def zhuangshi(func):
def inner():
print('吃雞之前左手摸雞')
func()
print('吃雞之後右手搖雞')
return inner
@zhuangshi
def chiji():
print('吃雞真得勁~')
chiji()
#第五步:帶有引數的函式的裝飾器
def zhuangshi(func):
def inner(a,b):
print('吃雞之前左手摸雞')
func(a,b)
print('吃雞之後右手搖雞')
return inner
@zhuangshi
def chiji(a,b):
print(a + '在' + b +'吃雞真得勁~')
chiji('文章','網咖')
#帶有返回值的函式
def zhuangshi(func):
def inner():
print('吃雞之前左手摸雞')
var = func()
print('吃雞之後右手搖雞')
return var
return inner
@zhuangshi
def chiji():
print('吃雞真得勁~')
return '落地98k~~'
result = chiji()
print(result)
#第六步:帶有收集引數的函式的裝飾器
def zhuangshi(func):
def inner(*args,**kwargs):
print('吃雞之前左右摸雞')
func(*args,**kwargs)
print('吃雞之後右手搖雞')
return inner
def chiji(*args,**kwargs):
print('參與吃雞的人有',args)
print('吃雞地點為',kwargs)
#呼叫函式
chiji('龐志','張帥','文章','老甘',pz = '網咖',zs = '理髮店',wz = '廁所',lg = 'america')
#第七步:帶有引數的裝飾器
def outer(arg):
def zhuangshi(func):
def inner():
if arg == '吃雞':
print('吃雞之前左手摸雞')
elif arg == '擼管':
print('擼管之前洗洗手')
func()
if arg == '吃雞':
print('吃雞之後右手搖雞')
elif arg == '擼管':
print('擼管之後抖一抖')
return inner
return zhuangshi
@outer('吃雞')
def chiji():
print('吃雞真得勁~')
chiji()
@outer('擼管')
def luguan():
print('小擼怡情大擼傷腎')
luguan()
#第八步:使用類作為裝飾器的引數
class chi:
def before():
print('吃雞之前左手摸雞')
def after():
print('吃雞之後右手搖雞')
def outer(arg):
def zhuangshi(func):
def inner():
arg.before()
func()
arg.after()
return inner
return zhuangshi
@outer(chi)
def chiji():
print('吃雞真得勁~')
chiji()
chiji()
#第九步:使用類作為裝飾器
#裝飾器(類)
class decor:
#初始化方法
def __init__(self,arg):
self.arg = arg
#新增call魔術方法
def __call__(self,func):
#將func引數存入物件使得其他方法可以呼叫
self.func = func
#返回未來的吃雞函式
return self.inner
#宣告內部函式
def inner(self):
print('吃雞之前左手摸雞')
self.func()
print('吃雞之後右手搖雞')
@decor('啥都行')
def chiji():
print('吃雞真得勁~')
chiji()
#第十步:為類新增裝飾器
def zhuangshi(func):
#未來的chi類的結果
def inner():
print('吃雞之前左手摸雞')
var = func()
print('吃雞之後右手搖雞')
return var
return inner
@zhuangshi
class chiji:
pass
result = chiji()
print(result)
#第十一步:裝飾器的巢狀
def zhuangshi1(func):
def inner():
print('吃雞之前左手摸雞')
func()
print('吃雞之後右手搖雞')
return inner
def zhuangshi2(func):
def inner():
print('吃雞之前洗洗手')
func()
print('吃雞之後抖一抖')
return inner
@zhuangshi1
@zhuangshi2
def chiji():
print('吃雞真得勁~~')
chiji()
python學習交流、資源共享群:563626388 qq
SVN各種情況說明
黃色感嘆號 有衝突 這是有衝突了,衝突就是說你對某個檔案進行了修改,別人也對這個檔案進行了修改,別人搶在你提交之前先提交了,這時你再提交就會被提示發生衝突,而不允許你提交,防止你的提交覆蓋了別人的修改。要解決衝突,如果你確認你的修改是無效的,則用tsvn還原你的修改就行了 如果認為你的修改是正確的,...
死鎖的各種情況總結
mutex 代表乙個全域性互斥物件 voida mutex.unlock return 複製 由於在if的執行體內直接retun,而沒有呼叫unlock,導致另乙個執行緒再呼叫a方法就出現死鎖。void sub func void data process 複製 void data process1...
apns 推送的各種情況總結
iphone應用程式 1 從給定的類名初始化應用 2 從給定的應用程式委託類,初始化乙個應用程式委託。並把該委託設定為應用程式的委託,這裡就有如果傳入引數為nil,會呼叫函式訪問 info.plist檔案來尋找主nib檔案,獲取應用程式委託。3 啟動主事件迴圈,並開始接收事件。1 負責處理到來的使用...