python常用的装饰器有哪些_python基本装饰器
#基本代碼:
import time
def decoratorrunlog_args(logval):
print("logval is runing"+str(logval))
def decoratorrunlog(func):
print("outerlog is runing")
def inner(*args,**kwargs):
print("innerlog is runing")
stime = time.time()
time.sleep(1)
res = func(*args,**kwargs)
etime = time.time()
print(etime - stime)
print("innerlog is stoping")
return res
print("outerlog is stoping")
return inner
print("logval is stoping")
return decoratorrunlog
def decoratortuntime_args(timeval):
print("timeval is runing:"+str(timeval))
def decoratorruntime(func):
print("outer is runing")
def inner(*args,**kwargs):
print("inner is runing")
stime = time.time()
time.sleep(1)
res = func(*args,**kwargs)
etime = time.time()
print(etime - stime)
print("inner is stoping")
return res
print("outer is stoping")
return inner
print("timeval is stoping")
return decoratorruntime
@decoratorrunlog_args("argsonelog")
@decoratortuntime_args("argstwotime")
def funcone(pname):
print("this is a basic function")
return pname
res = funcone("lily")
print(res)
#執行結果
logval is runingargsonelog
logval is stoping
timeval is runing:argstwotime
timeval is stoping
outer is runing
outer is stoping
outerlog is runing
outerlog is stoping
innerlog is runing
inner is runing
this is a basic function
1.000281810760498
inner is stoping
2.000582218170166
innerlog is stoping
lily
#圖示
#說明:
圖中:1.1,1.2,2.1,2.2 中, "."之前的數字表示執行的步驟,之后的數字表示多個裝飾器的數字標識;
#運行順序
基本是按照代碼編寫順序執行
第一步:1.1、1.2: 執行帶參數的裝飾器本身,
第二步:2.2、2.1:執行裝飾器
第三步:3.1、3.2:執行裝飾器內部的閉包函數
第四步:func:執行裝飾器裝飾的函數本身
第五步:5.2、5.1:執行閉包中func后面的部分
裝飾器執行的順序:按照其在所裝飾的函數中放置的順序來執行。首先從最上面的裝飾器開始按順序執行到函數位置,然后在從函數位置向上執行到最上面的裝飾器,再接著向下執行,如此反復直到裝飾器最內部的函數執行到被裝飾的函數本身之后才開始執行被裝飾的函數。順序類似于:↓↑↓↑
總結
以上是生活随笔為你收集整理的python常用的装饰器有哪些_python基本装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雪花算法生成数字id_全局唯一iD的生成
- 下一篇: python读取txt文件存储数组_py