【问题标题】:How does python lambda handle not declared symbols?python lambda如何处理未声明的符号?
【发布时间】: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,它也不会按预期工作,因为“操作”键将持有Nonehandler 函数没有return

标签: python python-3.x lambda closures


【解决方案1】:

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

【讨论】:

  • 值得一提的是,第一个例子无论如何都是错误的,它应该是"action": handler而不是"action": handler(x)才能等价于lambda。
  • @Dan,是的 - 我的抄袭很拙劣,感谢您指出
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 2012-08-24
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多