简单装饰器示例:
def servlet(func): print("into servlet")#1 print(servlet)#2 def foo(): print("into foo")#7 print(func)#8,真正的bar函数 func()#9 print("out foo")#13 print(foo)#3 print("out servlet")#4 return foo@servletdef bar(): print("in old bar")/#0 print(bar)#11 print("out old bar")#12print(bar)#5,已经被装饰器装饰了bar()#6
执行顺序如上,执行结果如下
into servlet<function servlet at 0x00000186A1341E18><function servlet.<locals>.foo at 0x00000186A1801E18>out servlet<function servlet.<locals>.foo at 0x00000186A1801E18>into foo<function bar at 0x00000186A1801AE8>in old bar<function servlet.<locals>.foo at 0x00000186A1801E18>out old barout fooProcess finished with exit code 0
可变参数装饰器示例:
def desc(func): print("in desc") print(desc) def foo(*arg1,**arg2): print("in foo") print(func) x = func(*arg1,**arg2) print("out foo") return x print(foo) print("out desc") return foo@descdef setArg1(x,y): print("in setArg1") print(setArg1) print("out setArg1") return x + y@descdef setArg2(x,y,z): print("in setArg2") print(setArg2) print("out setArg2") return x + y + zprint(setArg1)print(setArg2)x = setArg1(100,200)y = setArg2(100,200,300)print(x)print(y)
代码如上,执行结果如下
in desc<function desc at 0x0000024DF2611E18><function desc.<locals>.foo at 0x0000024DF2AD1E18>out descin desc<function desc at 0x0000024DF2611E18><function desc.<locals>.foo at 0x0000024DF2AD1EA0>out desc<function desc.<locals>.foo at 0x0000024DF2AD1E18><function desc.<locals>.foo at 0x0000024DF2AD1EA0>in foo<function setArg1 at 0x0000024DF2AD1AE8>in setArg1<function desc.<locals>.foo at 0x0000024DF2AD1E18>out setArg1out fooin foo<function setArg2 at 0x0000024DF2AD1A60>in setArg2<function desc.<locals>.foo at 0x0000024DF2AD1EA0>out setArg2out foo300600Process finished with exit code 0
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦