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
在定义后被调用,所以没问题。
我有一个像这样的简单模块:
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
在定义后被调用,所以没问题。