自动化测试(四)python-闭包

46 阅读1分钟

闭包在许多场景中非常有用,例如创建工厂函数、装饰器、数据封装等。

1. 闭包的结构

一个典型的闭包包含以下部分:

  • 内部函数:定义在外部函数内部的函数。
  • 自由变量:内部函数引用的外部函数中的变量。
  • 闭包对象:内部函数对象,包含了对自由变量的引用。

2. 闭包的应用场景

2.1 工厂函数

工厂函数可以根据不同的参数返回不同的函数对象。

def make_multiplier(factor):
    def multiplier(number):
        return number * factor
    return multiplier

# 创建两个不同的乘法器
double = make_multiplier(2)
triple = make_multiplier(3)

print(double(5))  # 输出: 10
print(triple(5))  # 输出: 15

解释

  • make_multiplier 是外部函数,factor 是自由变量。
  • multiplier 是内部函数,它引用了 factor
  • 每次调用 make_multiplier 都会返回一个新的 multiplier 函数对象,每个对象都捕获了不同的 factor 值。

2.2 装饰器

装饰器是一种高阶函数,它接受一个函数作为参数并返回一个新的函数。闭包常用于实现装饰器。

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("函数调用前")
        result = func(*args, **kwargs)
        print("函数调用后")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Alice")

输出

函数调用前
Hello, Alice!
函数调用后

解释

  • my_decorator 是外部函数,func 是自由变量。
  • wrapper 是内部函数,它引用了 func
  • wrapper 在调用 func 之前和之后添加了额外的逻辑。

2.3 数据封装

闭包可以用于封装数据,提供对外的接口而隐藏内部实现。