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

标签 python lambda

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

最佳答案

您在单独的模块中定义 getLambdasquareMelambdaSource 模块只能看到在其范围内定义的内容——也就是说,您直接在其中定义的所有内容以及您在其中导入 的所有内容。

要使用 getLambda 中的 squareMe,您需要 lambdaSource.py 有一个 from runMe import squareMe 语句(而不是像你看起来那样反过来)。

关于python - 在 Python 的 Lambda 函数中使用(截至目前)未定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31528708/

相关文章:

recursion - 解释 The Little Schemer 第 137 页上的延续示例

recursion - Prolog 程序 Convert(L,X) 将列表 L 转换为整数 : x1 + x2*10^1+ … + xn*10^(n-1)

Lambda演算表达式实现函数应用

Python 列表理解返回错误标签

Java 8 并行处理和 Lambda 表达式

python - Pytorch:输出 w.r.t 参数的梯度

python - 如何以 "pretty"格式打印二维数组?

c# - 你如何像 C# 一样使用 C++ lambda

python - 如何拆分具有多个批处理的数据框中的每一行并为每个批处理打印出不同的行

python - Django - 某些 View 的用户权限?