"""
装饰器
定义:
在执行一个功能A的基础上添加一个新功能AA,
不破坏原功能A的代码
并且可以复用,对A之外的很多功能B、C、D等等都可以
是一个很著名的设计模式
使用场景:经常被用于有切面需求的场景,如:添加日志、安全、事物等
好处:把大量函数中与函数功能本身无关的代码抽离出来,实现复用
"""
# python装饰器decorator之计算函数运行时间的例子
import time
# 最初的样子,没使用装饰器
def is_prime(num):
# 判断一个数是否是质数
if num < 2:
return False
elif num == 2:
return True
else:
for i in range(2,num//2+1):
if num%i == 0:
return False
return True
def prime_nums():
# 打印2到10000之间的素数,添加计数器,看执行了多长时间
t1 = time.time()
for i in range(2,10000):
if is_prime(i):
print(i)
t2 = time.time()
print(t2-t1)
prime_nums()
# 用了装饰器,把统计时间的分离出来,无返回值
def display_time(func):
def wrapper():
t1 = time.time()
func()
t2 = time.time()
print("Total time: {:.4} s".format(t2-t1))
return wrapper
def is_prime(num):
# 判断一个数是否是质数
if num < 2:
return False
elif num == 2:
return True
else:
for i in range(2,num//2+1):
if num%i == 0:
return False
return True
@display_time
def prime_nums():
# 打印2到10000之间的素数
for i in range(2,10000):
if is_prime(i):
print(i)
prime_nums()
# 用了装饰器,把统计时间的分离出来,有返回值
def display_time(func):
def wrapper():
t1 = time.time()
result = func()
t2 = time.time()
print("Total time: {:.4} s".format(t2-t1))
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//2+1):
if num%i == 0:
return False
return True
@display_time
def count_prime_nums():
# 统计质数的个数
count = 0
for i in range(2,10000):
if is_prime(i):
count += 1
return count
count = count_prime_nums()
print(count)
# print(count_prime_nums())
# 用了装饰器,把统计时间的分离出来,有返回值,且函数有参数
def display_time(func):
def wrapper(*args):
t1 = time.time()
result = func(*args)
t2 = time.time()
print("Total time: {:.4} s".format(t2-t1))
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//2+1):
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 += 1
return count
# 执行count_prime_nums()函数
count = count_prime_nums(500)
print(count)
python 装饰器
最新推荐文章于 2024-03-04 15:55:42 发布