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('')?