为什么Pylint不喜欢内置函数?

igo*_*gue 73 python list-comprehension pylint

我有这样一条线:

filter(lambda x: x == 1, [1, 1, 2])
Run Code Online (Sandbox Code Playgroud)

Pylint正在显示警告:

W:  3: Used builtin function 'filter'
Run Code Online (Sandbox Code Playgroud)

这是为什么?列表理解推荐的方法是什么?

当然我可以像这样重写:

[x for x in [1, 1, 2] if x == 1]
Run Code Online (Sandbox Code Playgroud)

而且我没有收到任何警告,但我想知道是否有这样的PEP?

Ned*_*der 94

Pylint经常在谈论不应该做的事情.您可以在.pylintrc文件中禁用警告.

此页面http://pylint-messages.wikidot.com/messages:w0141表明问题是过滤器和地图已被列表推导取代.

你的pylintrc文件中这样的一行会使警告变得安静:

disable=W0141
Run Code Online (Sandbox Code Playgroud)

  • 我也不知道.我用"-i y"标志运行pylint以包含消息号,然后我用Google搜索"pylint W0141",这就是我找到的. (6认同)
  • 考虑通过使用更长,更可读的消息名称来禁用它:`#pylint:disable = bad-builtin`.或者在pylintrc中:`[MESSAGES CONTROL] disable = bad-builtin`.更清楚的是,只是一个警告号码. (3认同)

ser*_*inc 10

这是为什么?列表理解推荐的方法是什么?

列表理解建议在教程示例中说明

它更简洁,更易读.

并且大多数答案都是关于SO的Python List Comprehension Vs. 地图在那里它是

  1. 使用列表理解比使用每次filter定义更有效lambda
  2. 如果函数是预定义的,则可能更具可读性(并具有相似的效率)filter
  3. 需要使用filter,map如果你
    • 地图map,
    • 咖喱map,或
    • 使用函数式编程

TL; DR:在大多数情况下使用列表理解


ben*_*min 5

我遇到了同样的问题,无法解决

内置函数“输入”为什么不好。我你打算

禁用它:

pylint --bad-functions =“ [地图,过滤器,应用]” YOUR_FILE_TO_CHECK_HERE

一旦您喜欢设置:

pylint --bad-functions="[map,filter,apply]" --some-other-supercool-settings-of-yours
--generate-rcfile > test.rc
Run Code Online (Sandbox Code Playgroud)

验证设置是否在文件中,例如:

cat test.rc | grep -i YOUR_SETTING_HERE
Run Code Online (Sandbox Code Playgroud)

之后,您可以在本地使用此文件

pylint --rcfile test.rc --your-other-command-line-args ...
Run Code Online (Sandbox Code Playgroud)

甚至将其用作默认的rcfile。为此,请您参考

pylint --long-help
Run Code Online (Sandbox Code Playgroud)

  • 在python2中,input()是邪恶的,因为它执行eval(raw_input())。您应该始终使用`raw_input()`。在python3中,“ input()”具有所需的行为(总是返回“ str”)。 (4认同)