在Python中使用(截至目前)Lambda函数中的未定义函数

时间:2015-07-21 01:01:30

标签: python lambda

我想在一个不同模块中定义一个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时,一切正常吗?

1 个答案:

答案 0 :(得分:3)

您在单独的模块中定义getLambdasquareMelambdaSource模块只能看到其范围内定义的内容 - 即您在其中直接定义的所有内容以及import中的所有内容。

要使用squareMe中的getLambda,您需要lambdaSource.py拥有from runMe import squareMe声明(而不是您似乎正在做的其他方式)。