变量赋值Python中的函数的局部范围(Assign variable to local scope

2019-10-18 03:26发布

我想一个变量分配给一个名为几次拉姆达的范围。 每次与变量的新实例。 我怎么做?

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

# Code needed here to prepare f with a new var

result = f(10)

在这种情况下,它的变种,我想,以取代每次调用它不是一个有第二个参数。

Answer 1:

在一个范围未定义的变量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


Answer 2:

f = functools.partial(lambda var, x: x + var.x - var.y, var)会给你一个函数( f一个参数(的) x与) var固定在值它是在定义的点。



Answer 3:

你不能使用赋值语句的lambda表达式,所以你必须使用一个定期开展评选函数:

def f(x):
    global var
    var = x

注意使用“全球”关键字。 没有它,Python会假设你想在函数的局部范围,以创建一个新的“变种”的变量。



Answer 4:

让它另一个参数:

f = lambda x,var: x + var.x - var.y
result = f(10, var)

LAMBDA或常规功能,你可以在一个函数的范围改变一个变量的唯一方法是通过一个参数。



文章来源: Assign variable to local scope of function in Python
标签: python lambda