这是一段打印1到1000素数并输出过程时间的代码
import time
def is_prime(num):
if num==1:
return True
else:
for i in range(2,num):
if num%i==0:
return False
return True
def prime_num():
t1=time.time()
for i in range(1,100):
if is_prime(i):
print(i)
t2=time.time()
print(t2-t1)
prime_num()
我们可以把输出时间这一部分作为装饰器,来简化主函数。
装饰器下面的函数作为装饰器的参数 func ,在被调用时,按照它在装饰器的返回函数 wrapper 中的位置顺序执行。
返回函数是把函数作为返回值,用内部函数引用外部函数的参数和局部变量。
def playtime(func):
def wrapper():
t1=time.time()
func()
t2=time.time()
print(t2-t1)
return wrapper
@playtime
def prime_num():
for i in range(1,100):
if is_prime(i):
print(i)
如果被装饰的函数有参数,需要把参数从 func 传出到 wrapper 中,
def playtime(func):
def wrapper(*args):
t1=time.time()
func(*args)
t2=time.time()
print(t2-t1)
return wrapper
@playtime
def prime_num(n):
count=0
for i in range(n,100):
if is_prime(i):
print(i)
prime_num(10)
如果被装饰的函数有返回值,需要把返回值传到 wrapper 中,用变量来表示 func 传出来的值并返回
def playtime(func):
def wrapper(*args):
t1=time.time()
result=func(*args)
t2=time.time()
print(t2-t1)
return result
return wrapper
@playtime
def prime_num(n):
count=0
for i in range(n,100):
if is_prime(i):
count+=1
return count
print(prime_num(10))