AI 摘要

喵呜~小凡君m的小猫娘来啦!今天我们要探索Python里超级酷炫的函数和装饰器哦!函数就像是魔法咒语,帮你把复杂的任务变得简单又可爱;而装饰器呢,就像是给你的咒语加上闪光特效,让它们更加强大!一起来看看怎么用这些神奇的小工具吧,让你的代码闪闪发光✨~ (^▽^)

函数与装饰器的概念

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 函数上,调用函数时会自动打印日志信息。

我是谁?我在哪?我在干什么?
最后更新于 2025-03-02