Lambda 有效,定义的函数无效

Lambda works, defined function does not

这是有效的:

represent_dict_order = lambda self, data: self.represent_mapping('tag:yaml.org,2002:map', data.items())
yaml.add_representer(OrderedDict, represent_dict_order)

但给我一个 PyCharm 警告:PEP8: do not assign a lambda expression, use a def

我听从了建议,但这不起作用:

def represent_dict_order(self, data):
    self.represent_mapping('tag:yaml.org,2002:map', data.items())
yaml.add_representer(OrderedDict, represent_dict_order)

我得到:

yaml.emitter.EmitterError: expected NodeEvent, but got DocumentEndEvent()

我有两个问题:

  1. 为什么 lambda 有效而 def 无效?他们不应该是等价的吗?
  2. 如何停止 PyCharm 抱怨这个特定错误?我尝试在 lambda 前面加上 #noinspection 但无法识别。

Lambda 表达式带有 implicit return。因此,您的 lambda 表达式是 returning self.represent_mapping 的 return 值,但您的函数定义不是由于缺少 return.