2024-05-14 19:12:20 发布
网友
我想为多次调用的lambda的作用域分配一个变量。每次都有一个新的变量实例。我该怎么做?
f = lambda x: x + var.x - var.y # Code needed here to prepare f with a new var result = f(10)
在本例中,我想为每个调用替换var,而不将其作为第二个参数。
f = functools.partial(lambda var, x: x + var.x - var.y, var)将给您一个函数(f)的一个参数(x),其中var固定在定义点的值上。
f = functools.partial(lambda var, x: x + var.x - var.y, var)
f
x
var
在lambda作用域中未定义的变量从调用作用域的调用点解析。
lambda
一个稍微简单的例子。。。
>>> y = 1 >>> f = lambda x: x + y >>> f(1) 2 >>> y = 2 >>> f(1) 3
……因此,在调用lambda之前,只需在调用作用域中设置var,尽管在y是“常量”的情况下,这更常用。
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”变量。
f = functools.partial(lambda var, x: x + var.x - var.y, var)
将给您一个函数(f
)的一个参数(x
),其中var
固定在定义点的值上。在
lambda
作用域中未定义的变量从调用作用域的调用点解析。一个稍微简单的例子。。。
……因此,在调用
lambda
之前,只需在调用作用域中设置var
,尽管在y
是“常量”的情况下,这更常用。对该函数的反汇编显示。。。
如果要在定义
lambda
(即创建closure)时将y
绑定到对象,通常会看到这样的习惯用法。。。……因此,在定义
lambda
之后对y
的更改没有影响。对该函数的反汇编显示。。。
不能在lambda表达式中使用赋值语句,因此必须使用正则命名函数:
注意使用“global”关键字。如果没有它,Python将假定您希望在函数的本地范围内创建一个新的“var”变量。
相关问题 更多 >
编程相关推荐