装饰器在我初次接触的时候,还是花了时间理解的
我将用大白话,和个人理解来进行复盘
意义:
简单来说装饰器的作用就是在不改变函数本身的功能和调用方式的情况下添加新的功能.
如F1()是准备要装装饰器的函数,装饰器就是在F1()的基础上加画❀
再简单点说 就是给F1穿上衣服 而装饰器就是衣服
具体:
1、定义成装饰器函数,函数的参数的作用是为了接收需要被装饰的函数的名字。
2、在定义被装饰的函数时, 开头写上@装饰器名
例子:
被装饰函数作用:计算0-num内所有质数和
#判断是否为质数的函数
def is_prime(num):
if num<2:
return false
elif num==2:
return ture
else:
for i in range(2,num):
if num % i == 0:
return false #return可以立刻结束函数 所以不需要break跳出循环
return ture
#主函数
def prime_nums(num):
count = 0
for i in range(2, num):
if is_prime(i):
count = count + i
return count
装饰器的作用:给目标函数添加可以计算运行时间的功能
*arg**kwarg就是可以接受任何类型、任何长度的参数的意思
import time
#装饰器函数
def display_time(func): #func就是人(被装饰的函数)的名字
def wrapper(*args, **kwargs): #wrapper就是衣服(装饰器函数)
t1 = t1.time()
result = func(*args, **kwargs) #人有返回值就用变量接收 然后在衣服里返回这个变量
t2 = t2.time()
print(t2-t1)
print(func.__name__) #打印func的name属性 就是看人的名字
return result #如果人有返回值 那么就需要在衣服里再返回一次
return wrapper #返回这个已经编织好的衣服名字
运行:
import time
def display_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
result = func(*args, **kwargs)
t2 = time.time()
print(t2 - t1)
print(func.__name__)
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 #调用装饰器 给prime_nums穿上衣服
def prime_nums(num):
count = 0
for i in range(2, num):
if is_prime(i):
count = count + 1
return count
count = prime_nums(10000)
print(count)
结果:
0.3351273536682129
prime_nums
1229