Python训练营打卡DAY27
DAY 27 函数专题2:装饰器
知识点回顾:
- 装饰器的思想:进一步复用
- 函数的装饰器写法
- 注意内部函数的返回值
作业:
编写一个装饰器 logger,在函数执行前后打印日志信息(如函数名、参数、返回值)
@logger
def multiply(a, b):return a * bmultiply(2, 3)
# 输出:
# 开始执行函数 multiply,参数: (2, 3), {}
# 函数 multiply 执行完毕,返回值: 6
#normal
import timedef is_prime(num):if num < 2:return Falseelif num == 2:return Trueelse:for i in range(2, num):if num % i == 0:return Falsereturn Truedef 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 Falseelif num == 2:return Trueelse:for i in range(2, num):if num % i == 0:return Falsereturn 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 执行完毕,返回值: 6def logger(func):def wrapper(*args, **kwargs):print(f'开始执行函数 {func.__name__},参数: {args}, {kwargs}')result = func(*args, **kwargs)print(f'函数 {func.__name__} 执行完毕,返回值: {result}')return resultreturn wrapper@logger
def multiply(num1, num2):return num1 * num2multiply(2,3)
@浙大疏锦行-CSDN博客