在Python中将变量赋值给本地函数范围

Jon*_*ing 2 python lambda

我想将一个变量分配给多次调用的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我想替换每次调用而不使它成为第二个参数.

Aya*_*Aya 8

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)