在Python中将变量赋给函数的局部作用域

2024-05-14 19:12:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为多次调用的lambda的作用域分配一个变量。每次都有一个新的变量实例。我该怎么做?

f = lambda x: x + var.x - var.y

# Code needed here to prepare f with a new var

result = f(10)

在本例中,我想为每个调用替换var,而不将其作为第二个参数。


Tags: to实例lambdanew参数herevarwith
3条回答

f = functools.partial(lambda var, x: x + var.x - var.y, var)将给您一个函数(f)的一个参数(x),其中var固定在定义点的值上。

lambda作用域中未定义的变量从调用作用域的调用点解析。

一个稍微简单的例子。。。

>>> y = 1
>>> f = lambda x: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
3

……因此,在调用lambda之前,只需在调用作用域中设置var,尽管在y是“常量”的情况下,这更常用。

对该函数的反汇编显示。。。

>>> import dis
>>> dis.dis(f)
  1           0 LOAD_FAST                0 (x)
              3 LOAD_GLOBAL              0 (y)
              6 BINARY_ADD
              7 RETURN_VALUE

如果要在定义lambda(即创建closure)时将y绑定到对象,通常会看到这样的习惯用法。。。

>>> y = 1
>>> f = lambda x, y=y: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
2

……因此,在定义lambda之后对y的更改没有影响。

对该函数的反汇编显示。。。

>>> import dis
>>> dis.dis(f)
  1           0 LOAD_FAST                0 (x)
              3 LOAD_FAST                1 (y)
              6 BINARY_ADD
              7 RETURN_VALUE

不能在lambda表达式中使用赋值语句,因此必须使用正则命名函数:

def f(x):
    global var
    var = x

注意使用“global”关键字。如果没有它,Python将假定您希望在函数的本地范围内创建一个新的“var”变量。

相关问题 更多 >

    热门问题