2010-08-25 79 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:在大多數情況下使用列表理解

相關問題