我想在不同的模块中定义一个lambda函数,它将被执行。在lambda将被调用的模块中,有方法当lambda被定义时不可用。事实上,当lambda尝试使用这些函数时,Python会抛出一个错误。使用(截至目前)Python中的Lambda函数中的未定义函数
例如,我有两个模块。
lambdaSource.py:
def getLambda():
return lambda x: squareMe(x)
runMe.py
import lambdaSource
def squareMe(x):
return x**2
if __name__ == '__main__':
theLambdaFunc = lambdaSource.getLambda()
result = theLambdaFunc(5)
如果运行runMe.py
,你会得到一个名称错误:NameError: global name 'squareMe' is not defined
我能解决这个问题的唯一途径在运行时修改lambda的全局变量字典。
theLambdaFunc.func_globals['squareMe'] = squareMe
这个例子很有意思,但这是我所期望的行为。任何人都可以解释为什么第一个例子不起作用?为什么'squareMe'不适用于lambda函数的范围?特别是,如果我只是定义了函数squareMe
下的lambda,那么一切正常?
难道你不能让'getLambda'接受一个参数并传递函数,例如'getLambda(f):return lambda x:f(x)'?我看不出为什么你需要按照你现在这样做的方式去做。 – Marius
要清楚,这个例子只是说明了这个问题。实际上,lambda函数来自一个静态的configuration.ini文件,由另一个python模块解析,然后传递给更高级别的模块执行。 –