假设我们有这样一个需求,就是找出【2,num】之间有多少个素数,并且打印出代码执行的时间,我们就可以设计出一个装饰器实现逻辑与打印时间分离的功能,
装饰器的作用是改变其他函数的功能,让你在这个函数的前后可以分别执行一段代码
import time
def display_time(func):
def wrapper(*args):#args用来处理func的参数
t1=time.time()
result=func(*args)#result用来保存func还回出来的数据
t2=time.time()
print("Total time:{:.4}s".format(t2-t1))
return result#通过这一步就会将func执行的结果还回出来
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
#在执行count_primes_nums的时候会去执行装饰器display_time
@display_time
def count_prime_nums(num):
count=0
for i in range(2,num):
if is_prime(i):
count=count+1
return count
count=count_prime_nums(100000)
print(count)