Auto-PEP8 通过将我的 lambda 转换为 def 函数来添加行,我如何禁用这种特定的自动格式?

Posted

技术标签:

【中文标题】Auto-PEP8 通过将我的 lambda 转换为 def 函数来添加行,我如何禁用这种特定的自动格式?【英文标题】:Auto-PEP8 is adding lines by turning my lambda into def function, how do I disable this specific auto format? 【发布时间】:2019-06-21 02:38:52 【问题描述】:

我正在使用 Visual Studio Code,PEP8 会自动格式化我的部分代码,我刚刚学习 lambda,我有一个像这样的 3 行代码:

它来自这 3 行代码:

# Lambda example
divide = lambda x, y: x/y
print(divide(10, 2))

到这7行代码:

# Lambda example


def divide(x, y): return x/y


print(divide(10, 2))

有谁知道如何让这个程序专门不将我的 lambda 函数转换为 def 函数?

它对我的代码进行了很好的格式化,所以我不想完全禁用这个自动功能,只是为了 lambda 的东西。

【问题讨论】:

PEP8 只是在做它的工作。见这里***.com/a/25010243/3508192 一般的经验法则是,当你命名一个 lambda 函数时,你应该使用一个命名的来代替。 明确地说,您将 lambda 定义为变量违背了 lambda 的目的,因此 pep8 只是让您所做的更清晰。这是错误E731,所以如果你不希望它转换你的代码,那可能就是你想要摆脱的东西。 @charliebeckwith 谢谢,您介意解释或链接解释为什么“将 lambda 定义为变量”是错误的源吗?只是为了让我更好地理解它,因为在谷歌搜索“Python Lambda”示例时会出现将 lambda 分配给变量,所以我很困惑 我想,我做到了。这不是“错误的”。只是,你所做的等同于定义一个函数,只是你使用 lambdas 的方式与它们的目的相反。我不想说反模式,其他人将不得不插话......这是另一个参考dzone.com/articles/pros-and-cons-lambda,说明为什么不这样做。 【参考方案1】:

这是由pycodestyle 代码E731 触发的

您可以使用 --ignore=E731 禁用此功能

在配置文件中(例如 tox.ini / setup.cfg):

[pep8] 
ignore=E731

【讨论】:

只是为了清楚为什么 - “E731 不分配 lambda 表达式。” 感谢您的回答。这对我有用!为了绝对清楚,要在 VSCode 中添加它,在您的设置中搜索 python formatting args,然后添加 --ignore=E731 作为附加输入参数 - i.stack.imgur.com/FlEqM.png【参考方案2】:

有一些方法可以禁用自动将 lambda 转换为函数定义。

使用--ignore=E731,正如 Anthony Sottile 在(他/她)的回答中所解释的那样。按Ctrl+,,搜索autopep8,添加项目--ignore=E731,如下图所示。

或者您首先通过调用pip uninstall autopep8 卸载autopep8,然后通过pip install yapf 安装yapf

我让其他人从这一行添加其他方法。

【讨论】:

以上是关于Auto-PEP8 通过将我的 lambda 转换为 def 函数来添加行,我如何禁用这种特定的自动格式?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 8 的 lambda 表达式,将 List<Byte> 转换为原始字节 [],无需外部库 [重复]

为啥 PDO 将我的 bool(false) 参数转换为 string('')?

如何在Java 8中循环通过字节数组?

如何在 lambda 中使用 node-js 将我的文件添加到现有的 zip 文件夹?

如何使用 vim 将我的文件转换为 utf8?

如何使用 Java 8 Lambda 将对象列表转换为 Map<Object, Object>