函数与装饰器的概念
1. 函数
函数是编程中用于封装一段可重复使用的代码块的结构。通过定义函数,可以将复杂的功能分解为多个小模块,提高代码的可读性和复用性。
- 定义函数:使用
def
关键字定义函数,函数可以接受参数并返回值。 - 调用函数:通过函数名和参数调用函数,执行函数中的代码。
- 文档字符串:在函数定义中使用
"""
添加文档字符串,用于描述函数的功能。
2. 装饰器
装饰器是 Python 中一种高级功能,用于在不修改原函数代码的情况下,为函数添加额外的功能(如日志记录、性能测试等)。
- 装饰器本质:装饰器是一个函数,它接受一个函数作为参数,并返回一个新的函数。
- 使用装饰器:在函数定义前使用
@装饰器名
语法,将装饰器应用到函数上。 - 带参数的装饰器:装饰器本身也可以接受参数,用于更灵活地控制装饰器的行为。
示例代码注释说明
1. 定义一个简单的问候函数
def greet(name):
"""这是一个简单的问候函数"""
print(f"Hello, {name}!") # 打印问候语,name 是传入的参数
greet("Alice") # 调用 greet 函数,传入参数 "Alice"
greet("Bob") # 调用 greet 函数,传入参数 "Bob"
- 功能总结:
这部分代码定义了一个简单的函数greet
,用于打印问候语。通过调用函数并传入不同的参数,可以实现动态输出。
2. 定义一个加法函数
def add(a, b):
"""返回两个数的和"""
return a + b # 返回 a 和 b 的和
result = add(5, 3) # 调用 add 函数,传入参数 5 和 3
print(f"5 + 3 = {result}") # 打印计算结果
- 功能总结:
这部分代码定义了一个函数add
,用于计算两个数的和。通过return
语句返回结果,并将结果存储在变量result
中。
3. 定义一个计时装饰器
def timer_decorator(func):
"""计算函数执行时间的装饰器"""
import time # 导入 time 模块,用于获取当前时间
def wrapper(*args, **kwargs): # 定义内部函数 wrapper,接受任意参数
start_time = time.time() # 记录函数开始执行的时间
result = func(*args, **kwargs) # 调用原函数,并获取返回值
end_time = time.time() # 记录函数结束执行的时间
print(f"Function {func.__name__} executed in {end_time - start_time:.4f} seconds.") # 打印函数执行时间
return result # 返回原函数的返回值
return wrapper # 返回 wrapper 函数
@timer_decorator # 将 timer_decorator 应用到 slow_function 上
def slow_function():
"""一个模拟耗时的函数"""
import time
time.sleep(2) # 模拟耗时操作,暂停 2 秒
slow_function() # 调用 slow_function,装饰器会自动计时
- 功能总结:
这部分代码定义了一个装饰器timer_decorator
,用于计算函数的执行时间。通过@timer_decorator
语法,将装饰器应用到slow_function
上,调用函数时会自动打印执行时间。
4. 定义一个带参数的日志装饰器
def log_decorator(level):
"""带参数的日志记录装饰器"""
def decorator(func): # 定义内部函数 decorator,接受一个函数作为参数
def wrapper(*args, **kwargs): # 定义内部函数 wrapper,接受任意参数
print(f"[{level}] Calling function {func.__name__} with arguments {args} and keyword arguments {kwargs}.") # 打印函数调用信息
result = func(*args, **kwargs) # 调用原函数,并获取返回值
print(f"[{level}] Function {func.__name__} executed.") # 打印函数执行完成信息
return result # 返回原函数的返回值
return wrapper # 返回 wrapper 函数
return decorator # 返回 decorator 函数
@log_decorator("INFO") # 将带参数的 log_decorator 应用到 add 函数上,日志级别为 "INFO"
def add(a, b):
"""返回两个数的和"""
return a + b # 返回 a 和 b 的和
result = add(5, 10) # 调用 add 函数,装饰器会自动记录日志
print(f"Result of add: {result}") # 打印计算结果
- 功能总结:
这部分代码定义了一个带参数的装饰器log_decorator
,用于记录函数的调用和执行信息。通过@log_decorator("INFO")
语法,将装饰器应用到add
函数上,调用函数时会自动打印日志信息。
Comments NOTHING