DAY 27 函数专题2:装饰器
知识点回顾:
- 装饰器的思想:进一步复用
- 函数的装饰器写法
- 注意内部函数的返回值
作业:
编写一个装饰器 logger,在函数执行前后打印日志信息(如函数名、参数、返回值)
@logger`
`def` `multiply(a, b):`
`return a * b`
`multiply(2,` `3)`
`# 输出:`
`# 开始执行函数 multiply,参数: (2, 3), {}`
`# 函数 multiply 执行完毕,返回值: 6`
`
python
#normal
import time
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
def prime_nums():
t1 = time.time()
for num in range(2, 10000):
if is_prime(num):
print(num)
t2 = time.time()
print(f"执行时间:{t2 - t1}秒")
prime_nums()
#decorator
import time
def display_time(func):
def wrapper():
t1 = time.time()
func()
t2 = time.time()
print(f"函数执行时间: {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):
if num % i == 0:
return False
return True
# 装饰器的标准写法
@display_time
def prime_nums(): # 这2行是一个整体
"""
找出2到10000之间的所有素数并打印
"""
for i in range(2, 10000):
if is_prime(i):
print(i)
prime_nums()
#编写一个装饰器 logger,在函数执行前后打印日志信息(如函数名、参数、返回值)
# 输出:
# 开始执行函数 multiply,参数: (2, 3), {}
# 函数 multiply 执行完毕,返回值: 6
def logger(func):
def wrapper(*args, **kwargs):
print(f'开始执行函数 {func.__name__},参数: {args}, {kwargs}')
result = func(*args, **kwargs)
print(f'函数 {func.__name__} 执行完毕,返回值: {result}')
return result
return wrapper
@logger
def multiply(num1, num2):
return num1 * num2
multiply(2,3)