【问题标题】:Lambda works, defined function does notLambda 有效,定义函数无效
【发布时间】:2018-05-21 09:14:47
【问题描述】:

这是有效的:

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,但它无法识别。

【问题讨论】:

  • 与使用 def 的函数定义相比,您的 lambda 具有返回值。
  • @strippenzieher:哎呀,隐式返回,对。尴尬,但我会接受答案。
  • 对于第二个问题,如果您指的是 PEP8 警告,则需要忽略 E731。请参阅 stackoverflow.com/questions/28428307/…

标签: python lambda pycharm pep8


【解决方案1】:

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

【讨论】:

  • “显式优于隐式”:)
猜你喜欢
  • 2021-11-05
  • 2022-06-22
  • 2019-09-18
  • 2017-02-18
  • 2021-12-12
  • 2023-03-28
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多