我想将一个变量分配给多次调用的lambda的范围.每次都有一个新的变量实例.我怎么做?
f = lambda x: x + var.x - var.y
# Code needed here to prepare f with a new var
result = f(10)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它是var我想替换每次调用而不使它成为第二个参数.
a范围中未定义的变量lambda
是从调用它的调用范围中解析出来的.
一个稍微简单的例子......
>>> y = 1
>>> f = lambda x: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
3
Run Code Online (Sandbox Code Playgroud)
...所以你只需要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
Run Code Online (Sandbox Code Playgroud)
如果你想y
在定义一个对象时绑定一个对象lambda
(即创建一个闭包),通常会看到这个成语......
>>> y = 1
>>> f = lambda x, y=y: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
2
Run Code Online (Sandbox Code Playgroud)
...... y
定义后的更改lambda
无效.
该功能的反汇编显示......
>>> import dis
>>> dis.dis(f)
1 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 BINARY_ADD
7 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5689 次 |
最近记录: |