python lambda 如何处理未声明的符号?

How does python lambda handle not declared symbols?

我有一个像这样的简单模块:

CMD_MAP = {
    "action": handler
}

def handler(x):
    print(x)

if __name__ == "__main__":
    CMD_MAP["action"]("hello")

当尝试 run/import 它时,它会抛出一个

  File ".../example.py", line 2, in <module>
    "action": handler
NameError: name 'handler' is not defined

但是,当我将 CMD_MAP 更改为 :

CMD_MAP = {
    "action": lambda x: handler(x)
}

它可以正常工作。有人可以解释为什么吗?

在调用 lambda 之前,不会评估 lambda 的主体。在您的第一个示例中,您尝试在定义 handler 之前调用它,因此您会收到错误消息。在您的第二个示例中,handler 在定义后被调用,所以没问题。