2010-08-25 95 views
69

我有这样一行:为什么Pylint不像内置函数?

filter(lambda x: x == 1, [1, 1, 2]) 

pylint的是表示警告:

W: 3: Used builtin function 'filter' 

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

我当然可以像这样重写这个:

[x for x in [1, 1, 2] if x == 1] 

而且我没有得到任何警告,但我在想,如果有一个PEP这个?

+0

有趣地,当我使用内建函数'map'时,pylint不喜欢,但它不喜欢当我从'cytoolz'导入'map'函数来代替它。 – bli 2017-01-17 17:21:33

回答

89

Pylint经常聊天关于它不应该的东西。您可以禁用.pylintrc文件中的警告。

此页面http://pylint-messages.wikidot.com/messages:w0141表明问题在于过滤器和映射已被列表解析所取代。

这样一行在pylintrc文件就会安静警告:

disable=W0141 
+2

我不知道那个网站,非常感谢! – igorgue 2010-08-25 19:22:12

+6

我也不知道。我使用“-i y”标志运行pylint以包含消息编号,然后使用Google搜索“pylint W0141”,这就是我发现的。 – 2010-08-25 19:37:26

+0

完成,添加了一个示例行。 – 2014-08-07 10:16:26

4

我遇到了同样的问题,无法弄清楚

为什么内置函数'输入”是坏。我打算

禁用它:

pylint的--bad函数= “[图,过滤,应用]” YOUR_FILE_TO_CHECK_HERE

一旦你喜欢的设置:

pylint --bad-functions="[map,filter,apply]" --some-other-supercool-settings-of-yours 
--generate-rcfile > test.rc 

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

cat test.rc | grep -i YOUR_SETTING_HERE 

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

pylint --rcfile test.rc --your-other-command-line-args ... 

,甚至用它作为默认rcfile。为此,我仔细查阅你

pylint --long-help 
+0

只要放置“#pylint:disable = bad-builtin”会更快,但我怀疑有一些首选的方法可以从标准输入流中进行输入,如果记录在文档中的话,这些输入流将隐藏在深处。 – 2017-01-09 21:02:27

+1

在python2中,'input()'是邪恶的,因为它执行'eval(raw_input())'。你应该总是使用'raw_input()'。在python3中,'input()'具有所需的行为(总是返回'str')。 – 2017-01-11 16:15:49

7

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

列表理解是the tutorial example建议,其中规定

它更简明易读。

,并通过对SO的Python List Comprehension Vs. Map其中it is

  1. 更有效如果你每次都
  2. 也许更具可读性定义lambda使用列表理解比filter大多数应答者(与类似的效率)使用filter如果功能是预先定义的
  3. 必要使用filtermap如果你
    • 地图map
    • 咖喱map,或
    • 使用函数式编程

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

相关问题