我想在一个 不同的模块 中定义一个 lambda 函数,而不是在其中执行它。在将调用 lambda 的模块中,有一些可用的方法在 lambda 时不可用被定义为。实际上,当 lambda 尝试使用这些函数时,Python 会抛出错误。
例如,我有两个模块。
lambdaSource.py:
def getLambda():
return lambda x: squareMe(x)
运行程序
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
和 squareMe
。 lambdaSource
模块只能看到在其范围内定义的内容——也就是说,您直接在其中定义的所有内容以及您在其中导入
的所有内容。
要使用 getLambda
中的 squareMe
,您需要 lambdaSource.py
有一个 from runMe import squareMe
语句(而不是像你看起来那样反过来)。
关于python - 在 Python 的 Lambda 函数中使用(截至目前)未定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31528708/