装饰器
1)没有返回值的装饰器
import time
def decorator_fun(fun_dec):
def wrapepr():
t1 = time.time()
fun_dec()
t2 = time.time()
print(t1-t2)
return wrapepr
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
@decorator_fun
def prime_nums():
"""
引用装饰器,等同于 prime_nums = decorator_fun(prime_nums)
:return:
"""
for i in range(2,10000):
if is_prime(i):
print(i)
prime_nums()
2)有返回值的装饰器
import time
def decorator_fun(fun_dec):
def wrapepr():
t1 = time.time()
count = fun_dec()
t2 = time.time()
print("Total time:{:.4}s".format(t1-t2))
return count
return wrapepr
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
@decorator_fun
def count_prime_nums():
"""
引用装饰器,等同于 prime_nums = decorator_fun(prime_nums)
:return:
"""
count = 0
for i in range(2,10000):
if is_prime(i):
count+=1
return count
count = count_prime_nums()
print(count)
3)有参数的装饰器
import time
def decorator_fun(fun_dec):
# 运行fun_dec的时候需要运行那些内容
# def wrapepr(max_num):
def wrapepr(*args):
t1 = time.time()
# count = fun_dec(max_num)
count = fun_dec(*args)
t2 = time.time()
print("Total time:{:.4}s".format(t1-t2))
return count
return wrapepr
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
@decorator_fun
def count_prime_nums(max_num):
"""
引用装饰器,等同于 prime_nums = decorator_fun(prime_nums)
:return:
"""
count = 0
for i in range(2,max_num):
if is_prime(i):
count+=1
return count
count = count_prime_nums(1000)
print(count)