我想一个变量分配给一个名为几次拉姆达的范围。 每次与变量的新实例。 我怎么做?
f = lambda x: x + var.x - var.y
# Code needed here to prepare f with a new var
result = f(10)
在这种情况下,它的变种,我想,以取代每次调用它不是一个有第二个参数。
我想一个变量分配给一个名为几次拉姆达的范围。 每次与变量的新实例。 我怎么做?
f = lambda x: x + var.x - var.y
# Code needed here to prepare f with a new var
result = f(10)
在这种情况下,它的变种,我想,以取代每次调用它不是一个有第二个参数。
在一个范围未定义的变量lambda
从在它的名字叫点呼叫范围内解决。
稍微简单的例子...
>>> y = 1
>>> f = lambda x: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
3
...所以你只需要设置var
调用你之前在呼叫范围内lambda
,虽然这在情况比较常用的y
是“不变”。
该函数的反汇编显示...
>>> import dis
>>> dis.dis(f)
1 0 LOAD_FAST 0 (x)
3 LOAD_GLOBAL 0 (y)
6 BINARY_ADD
7 RETURN_VALUE
如果你要绑定y
在定义的指向一个对象lambda
(即创建一个封闭 ),这是经常可以看到这个成语...
>>> y = 1
>>> f = lambda x, y=y: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
2
......由此改变y
定义后lambda
没有任何效果。
该函数的反汇编显示...
>>> import dis
>>> dis.dis(f)
1 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 BINARY_ADD
7 RETURN_VALUE
f = functools.partial(lambda var, x: x + var.x - var.y, var)
会给你一个函数( f
一个参数(的) x
与) var
固定在值它是在定义的点。
你不能使用赋值语句的lambda表达式,所以你必须使用一个定期开展评选函数:
def f(x):
global var
var = x
注意使用“全球”关键字。 没有它,Python会假设你想在函数的局部范围,以创建一个新的“变种”的变量。
让它另一个参数:
f = lambda x,var: x + var.x - var.y
result = f(10, var)
LAMBDA或常规功能,你可以在一个函数的范围改变一个变量的唯一方法是通过一个参数。