分别从 原函数的返回值和函数参数两个角度来讲解python装饰器的用法
思路:实现在某范围内寻找质素 所需运行时间,分别讨论是否带有装饰器的情况
参考视频
公共代码 判断一个数是否是质数
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
1 不带有装饰器
def prime_nums():
t1 = time.time()
for i in range(100):
if is_prime(i):
print(i)
t2 = time.time()
print("Total time is:{:.4}".format(t2 - t1))
prime_nums()
运行结果:
2 使用装饰函数-原函数没有参数 且 没有返回值
def display_time(func): # 参数是接下来将跳转执行的函数
def wrapper():
t1 = time.time()
func()
t2 = time.time()
print("Total time is: {}".format(t2 - t1))
return wrapper
@display_time
def prime_nums():
for i in range(1000):
if is_prime(i):
print(i)
prime_nums()
运行结果为:
3 使用装饰函数-原函数有返回值
def display_time(func): # 参数是接下来将跳转执行的函数
def wrapper():
t1 = time.time()
result = func()
t2 = time.time()
print("Total time is: {}".format(t2 - t1))
return result
return wrapper
@display_time
def prime_nums():
count = 0
for i in range(1000):
if is_prime(i):
count += 1
# print(i)
return count
nums_prime = prime_nums()
print("该范围内有质数个数为:", nums_prime)
运行结果为:
4 使用装饰函数-原函数 有参数 且 有返回值
def display_time(func): # 参数是接下来将跳转执行的函数
def wrapper(*args):
t1 = time.time()
result = func(*args)
t2 = time.time()
print("Total time is: {:.4}".format(t2 - t1))
return result
return wrapper
@display_time
def prime_nums(min_num, max_num):
count = 0
for i in range(min_num, max_num):
if is_prime(i):
count += 1
# print(i)
return count
nums_prime = prime_nums(0, 1000)
print("该范围内有质数个数为:", nums_prime)
运行结果如下: