python装饰器decorator
format
def xxx (被装饰的函数):
----def yyy (若被装饰函数有参数,则输入)
----。。。。。。。
----被装饰函数(若被装饰函数有参数,则输入)
----。。。。。。。
----return 被装饰函数 #若被装饰函数种含有return,则需要增加该句
example
import time
def display_time(func): # ①
def wrapper(*args): # ② *args,不知道几个参数,有几个参数传几个参数
t1 = time.time() # ③
result = func(*args) # ④ func()=count_prime_nums()
t2 = time.time() # ⑩
print("Total time: {:.4} s".format(t2-t1)) # 11
return result
return wrapper
def is_prime(num): # ⑦
if num < 2:
return False
elif num == 2:
return True
else:
for i in range(2, num):
if num % i ==0:
return False
return True
@display_time # ①
def count_prime_nums(maxnum): # ④
count = 0 # ⑤
for i in range(2, maxnum): # ⑥
if is_prime(i): # ⑦
count = count+1 # ⑧
return count # ⑨
count = count_prime_nums(10000)
print(count)
output
Total time: 0.2543 s
1229
- 运行count_prime_nums()函数,首先是运行装饰器部分display_time()
- 在display_time()部分,运行到func()函数,即count_prime_nums()函数(被装饰函数)
- 若被装饰函数count_prime_nums()有return,则装饰器display_time()也需要return语句
- *args,表明有几个参数就传几个,不确定参数个数下使用
reference resources
B站–正月点灯笼–《python小技巧:装饰器(decorator)》