2010-08-25 6 views
69

J'ai une ligne comme ceci:Pourquoi Pylint n'aime pas les fonctions intégrées?

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

pylint est montrant un avertissement:

W: 3: Used builtin function 'filter' 

Pourquoi? est une compréhension de la liste la méthode recommandée?

Bien sûr, je peux réécrire cela comme ceci:

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

et je reçois aucun avertissement, mais je me demandais s'il y a un PEP pour cela?

+0

Funnily , pylint n'aime pas quand j'utilise la fonction intégrée 'map', mais il n'aime pas non plus quand je importez la fonction 'map' de' cytoolz' pour l'utiliser à la place. – bli

Répondre

89

Pylint bavarde souvent sur ce qu'il ne devrait pas faire. Vous pouvez désactiver l'avertissement dans un fichier .pylintrc.

Cette page http://pylint-messages.wikidot.com/messages:w0141 indique que le problème est que le filtre et la carte ont été remplacés par des listes compréhensibles.

Une ligne comme celui-ci dans votre fichier pylintrc apaisera l'avertissement:

disable=W0141 
+2

Je ne connaissais pas ce site, merci beaucoup! – igorgue

+6

Je ne savais pas non plus. J'ai couru pylint avec le drapeau "-i y" pour inclure le numéro du message, puis j'ai googlé "pylint W0141", et c'est ce que j'ai trouvé. –

+0

Fait, ajouté une ligne d'échantillon. –

4

je suis tombé sur le même problème et ne pouvait pas comprendre

pourquoi l'entrée de fonction intégrée ` » est mauvais . Je vous l'intention

pour le désactiver:

pylint --bad-fonctions = "[carte, filtre, appliquer]" YOUR_FILE_TO_CHECK_HERE

Une fois que vous aimez les paramètres:

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

Vérifiez que vos paramètres sont dans le fichier, par exemple:

cat test.rc | grep -i YOUR_SETTING_HERE 

Après cela, vous pouvez utiliser ce fichier localement

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

ou même l'utiliser comme rcfile par défaut. Pour cela, je vous renvoie de bien vouloir

pylint --long-help 
+0

Il est plus rapide de placer "#pylint: disable = bad-builtin", mais j'imagine qu'il existe un moyen préféré de faire des entrées à partir du flux d'entrée standard qui est caché quelque part si documenté. –

+1

Dans python2, 'input()' est mal parce qu'il fait 'eval (raw_input())'. Vous devriez toujours utiliser 'raw_input()'. Dans python3, 'input()' a le comportement désiré (retourne toujours 'str'). –

7

Pourquoi? est une compréhension de la liste la méthode recommandée?

compréhension de la liste est recommandée dans the tutorial example, qui stipule

il est plus concis et facile à lire.

et par la plupart answerers sur le SO de Python List Comprehension Vs. Mapit is

  1. plus efficace à utiliser la compréhension de la liste que filter si vous définissez un lambda chaque fois
  2. peut-être plus lisible (et efficacité similaire) filter si la fonction est prédéfinie utiliser filter et map si vous
    • carte map,
    • curry map, ou
    • utilisation programmation fonctionnelle

TL; DR: compréhension l'utilisation de la liste dans la plupart des cas

Questions connexes