温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python闭包如何实现

发布时间:2026-09-04 09:34:31 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

在 Python 中,**闭包(Closure)**是指:在一个函数内部定义另一个函数,并且内部函数引用了外部函数的变量,即使外部函数已经执行完毕,这些变量依然被内部函数保存和使用。

下面从原理 → 示例 → 注意事项三个方面说明。


一、闭包的基本实现方式

1️⃣ 最基础的闭包示例

def outer(x):
    def inner(y):
        return x + y
    return inner

f = outer(10)
print(f(5))  # 输出 15

解释:

  • outer 是外部函数
  • inner 是内部函数
  • inner 引用了 outer 的变量 x
  • outer(10) 返回的是 inner 函数
  • 即使 outer 执行结束,x=10 仍被 f 记住

二、闭包的核心条件

一个 Python 闭包必须满足:

  1. ✅ 函数中嵌套函数
  2. ✅ 内部函数引用外部函数的变量
  3. ✅ 外部函数返回内部函数

三、使用 nonlocal 修改外部变量

如果内部函数要修改外部变量,需要用 nonlocal:

def counter():
    count = 0
    def inc():
        nonlocal count
        count += 1
        return count
    return inc

c = counter()
print(c())  # 1
print(c())  # 2

⚠️ 没有 nonlocal 会报错:

UnboundLocalError

四、闭包的经典应用

1️⃣ 工厂函数(生成不同行为的函数)

def power(n):
    def calc(x):
        return x ** n
    return calc

square = power(2)
cube = power(3)

print(square(4))  # 16
print(cube(4))    # 64

2️⃣ 装饰器(闭包的典型应用)

def logger(func):
    def wrapper(*args):
        print("调用函数:", func.__name__)
        return func(*args)
    return wrapper

@logger
def add(a, b):
    return a + b

五、闭包 vs 类

对比项 闭包 类
状态保存 ✅ ✅
可读性 中 高
扩展能力 弱 强

简单状态 → 闭包
复杂逻辑 → 类


六、查看闭包变量

print(f.__closure__)
print(f.__closure__[0].cell_contents)

如果你愿意,我也可以:

  • 用 图示解释闭包内存结构
  • 对比 闭包 vs lambda
  • 讲 闭包在面试中的常见坑

你想深入哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手