首页 > 解决方案 > Python - 将变量范围绑定到闭包

问题描述

我有一些使用外部变量的函数。一个(基本上)简化的例子:

a = 2
b = 3

def f(x):
    return x * a + b

虽然我需要aand bin f,但我在其他任何地方都不需要它们。特别是,一个人可以写a = 5,这将改变 的行为f。我应该如何让a外界b看不见?

其他语言允许我大致编写以下代码:

let f = 
   a = 2
   b = 3
   lambda x: x * a + b

我想要的是:

def g():
    a = 2
    b = 3
    return lambda x: x * a + b

f = g()
del g

标签: pythonscopeclosures

解决方案


您可以使用默认参数来完成此操作。默认参数仅在创建闭包时计算一次(这就是为什么如果您将可变对象作为默认参数,则在调用之间保留状态)。

def f(x, a=2, b=3):
    return x * a + b

推荐阅读