裝飾器的各種情況。

2021-08-14 00:21:34 字數 3815 閱讀 1037

#裝飾器

'''#第一步:基本函式

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 負責處理到來的使用...