Python闭包(Closure)是指封装并返回函数的一个函数。闭包可以让一个函数访问到它所在外部代码块中的变量及函数,并持有对外部代码块的状态。它可以优雅地解决一些问题,也可以使程序更加简洁。
闭包的使用场景比较广泛,比如:
def counter(start=0): count = [start] def incr(): count[0] += 1 return count[0] return incr c = counter(5) print(c()) # 6 print(c()) # 7
上面的代码实现了一个计数器,闭包函数incr()持有外部代码块的状态count,每次调用该函数都会使count自增1。而counter()则返回了这个函数,使得我们可以在外部轻松调用。
除了计数器,闭包还可以用于实现面向对象编程的方式。例如:
def make_person(name): def get_name(): return name def set_name(new_name): nonlocal name name = new_name return {"get_name": get_name, "set_name": set_name} p = make_person("Alice") print(p["get_name"]()) # "Alice" p["set_name"]("Bob") print(p["get_name"]()) # "Bob"
上面的代码实现了一个简单的人类对象,get_name()和set_name()方法是对象的接口。我们通过闭包使得这两个方法可以访问到外部变量name,并且可以对其进行修改。
总之,Python闭包是一种非常优秀的编程技巧,它能够让我们在编写代码时更加灵活、简洁,同时也让我们拥有了面向对象编程的部分特性。