2010-08-25 9 views
69

Ich habe eine Zeile wie diese:Warum hat Pylint keine eingebauten Funktionen?

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

Pylint ist eine Warnung zeigt:

W: 3: Used builtin function 'filter' 

Warum ist das so? ist ein Listenverständnis die empfohlene Methode?

Natürlich kann ich umschreiben dies wie folgt aus:

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

Und ich keine Warnungen erhalten, aber ich frage mich, ob es für diese ein PEP ist?

+0

Funnily , pylint mag nicht, wenn ich die eingebaute Funktion 'map' verwende, aber es mag auch nicht wenn ich Importieren Sie die Funktion 'map' aus' cytoolz', um diese stattdessen zu verwenden. – bli

Antwort

89

Pylint schwatzt oft über Dinge, die es nicht tun sollte. Sie können die Warnung in einer .pylintrc-Datei deaktivieren.

Diese Seite http://pylint-messages.wikidot.com/messages:w0141 weist darauf hin, dass Filter und Karte durch List Comprehensions ersetzt wurden.

Eine Zeile wie diese in Ihrer pylintrc-Datei wird die Warnung ruhig:

disable=W0141 
+2

Ich wusste nicht über diese Website, vielen Dank! – igorgue

+6

Ich wusste es auch nicht. Ich rannte pylint mit dem "-i y" -Flag, um die Nachrichtennummer einzuschließen, dann googelte ich "pylint W0141", und das habe ich gefunden. –

+0

Fertig, eine Beispielzeile hinzugefügt. –

4

ich in das gleiche Problem lief und konnte nicht herausfinden

, warum die eingebaute Funktion `Eingang‘ schlecht . Ich Sie beabsichtigen

es zu deaktivieren:

Pylint --bad-Funktionen = "[Karte, Filter, gelten]" YOUR_FILE_TO_CHECK_HERE

Wenn Sie wie die Einstellungen:

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

Überprüfen Sie, ob sich Ihre Einstellungen in der Datei befinden, z. B .:

cat test.rc | grep -i YOUR_SETTING_HERE 

Danach können Sie diese Datei lokal

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

oder sogar als Standard-RC-Datei verwenden. Hierzu verweise ich Sie freundlich zu

pylint --long-help 
+0

"#pylint: disable = bad-builtin" einfach zu platzieren ist zwar schneller, aber ich vermute, dass es eine bevorzugte Methode gibt, Eingaben aus dem Standard-Eingabestream zu machen, der irgendwo tief verborgen ist, wenn er überhaupt dokumentiert wird. –

+1

In python2 ist 'input()' böse, weil es 'eval (raw_input())' ist. Sie sollten immer 'raw_input()' verwenden. In python3 hat 'input()' das gewünschte Verhalten (gibt immer 'str' zurück). –

7

Warum ist das so? ist ein Listenverständnis die empfohlene Methode?

Liste Verständnis in the tutorial example empfohlen wird, in dem es heißt

es ist mehr prägnant und lesbar.

und von den meisten Beantwortern auf SO dem Python List Comprehension Vs. Map wo it is

  1. effiziente Liste Verständnis als filter verwenden, wenn Sie ein lambda jedes Mal
  2. vielleicht definieren lesbares (und mit ähnliche Effizienz) zu verwenden filter, wenn die Funktion vordefiniert ist
  3. erforderlich verwenden filter und map wenn Sie
    • Karte map,
    • Curry map oder
    • funktionale Nutzung Programmierung

TL; DR: Begreifen Verwendung Liste in den meisten Fällen