我想在一个不同模块中定义一个lambda函数,而不是它将被执行。在将要调用lambda的模块中,有一些方法可用,当时没有lambda是定义的。实际上,当lambda尝试使用这些函数时,Python会抛出错误。
例如,我有两个模块。
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时,一切正常吗?
答案 0 :(得分:3)
您在单独的模块中定义getLambda
和squareMe
。 lambdaSource
模块只能看到其范围内定义的内容 - 即您在其中直接定义的所有内容以及import
中的所有内容。
要使用squareMe
中的getLambda
,您需要lambdaSource.py
拥有from runMe import squareMe
声明(而不是您似乎正在做的其他方式)。