PEP 8警告“不要使用lambda表达式使用def”用于defaultdict lambda表达式[重复]

Posted

技术标签:

【中文标题】PEP 8警告“不要使用lambda表达式使用def”用于defaultdict lambda表达式[重复]【英文标题】:PEP 8 warning "Do not use a lambda expression use a def" for a defaultdict lambda expression [duplicate] 【发布时间】:2018-01-29 02:59:40 【问题描述】:

我正在使用下面的 python 代码来创建字典。但是我收到了 dct_structure 变量的一个 PEP 8 警告。警告是:do not use a lambda expression use a def

from collections import defaultdict

dct_structure = lambda: defaultdict(dct_structure)
dct = dct_structure()
dct['protocol']['tcp'] = 'reliable'
dct['protocol']['udp'] = 'unreliable'

我还不习惯 python lambda 表达式。所以任何人都可以帮我定义下面两行python代码的函数以避免PEP警告。

dct_structure = lambda: defaultdict(dct_structure)
dct = dct_structure()

【问题讨论】:

你真的再打电话给dct_structure吗? f 是什么? 我在复制粘贴代码时出错了。我修好了。谢谢,@jonrsharpe。供提及 @Arijit 这是定义嵌套defaultdict 的标准方法... 什么工具导致了警告(如果它还没有通过使用正确的名称消失)?您应该可以通过命令行参数或行本身上指定格式的注释来抑制该特定情况。 @JonClements - 我正在使用 Pycharm 编写代码,但它仍然显示警告。 @Erwin - 我相信这个问题与另一个问题不同。这是用于 lambda defaultdict 表达式。 【参考方案1】:

Python 中的 lambda 本质上是一个匿名函数,具有笨拙的受限语法;警告只是说,鉴于您将其直接分配给一个变量 - 因此给 lambda 一个名称 - 您可以只使用 def,它具有更清晰的语法并将函数名称烘焙到函数对象中,提供更好的诊断。

你可以将你的 sn-p 重写为

def dct_structure():
    return defaultdict(dct_structure) 

dct = dct_structure() 

【讨论】:

以上是关于PEP 8警告“不要使用lambda表达式使用def”用于defaultdict lambda表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PyCharm选择性忽略PEP8代码风格警告信息

PythonStudy——PyCharm 选择性忽略PEP8代码风格警告信息

PyCharm选择性忽略PEP8代码风格警告信息

3.PEP 8是什么?

(转)PEP 8——Python编码风格指南

Python代码规范(PEP8)问题及解决