【发布时间】:2020-08-27 07:07:41
【问题描述】:
我有一个这样的简单模块:
CMD_MAP = {
"action": handler
}
def handler(x):
print(x)
if __name__ == "__main__":
CMD_MAP["action"]("hello")
当尝试运行/导入它时,它会抛出一个
File ".../example.py", line 2, in <module>
"action": handler
NameError: name 'handler' is not defined
但是,当我将 CMD_MAP 更改为:
CMD_MAP = {
"action": lambda x: handler(x)
}
它可以正常工作。谁能解释一下原因?
【问题讨论】:
-
每次你在名字前面加上括号,你就是在呼唤那个名字。即使您在
CMD_MAP之前定义了handler,它也不会按预期工作,因为“操作”键将持有None(handler函数没有return)
标签: python python-3.x lambda closures