9
votes

Comment faites-vous une boucle pour une boucle lorsque vous n'avez pas besoin d'index dans Python?

Si j'ai besoin d'un pour code> boucle en python: xxx pré>

mais n'utilise pas le i code> pour quoi que ce soit, pylint se plaint de la variable inutilisée. Comment devrais-je gérer cela? Je sais que vous pouvez faire ceci: P>

for dummy_index in range(1,42):
    print "spam"


2 commentaires

Ceci est très subjectif. Utilisez un _ ou préfixe préfixe ou choisissez sur un schéma différent et définissez l'option - factice-variables-rgx en conséquence (par exemple, inutilisé _ ).


En fait, comme "i" est utilisé et c'est une partie nécessaire de la syntaxe dans la déclaration pour , le seul mannequin la chose autour est Pylint lui-même. Je conseillerais de placer cela comme un rapport de bogue dans le projet PYLINT.


5 Réponses :


15
votes
for _ in range(1,42):
    print "spam"

6 commentaires

Je pensais que cela pourrait le reconnaître car il est traditionnellement utilisé lorsque vous n'avez aucune utilisation de la variable.


+1: Avec les paramètres par défaut, Pylint ne se plaint pas de variables inutilisées commençant par "mannequin" ou "_". L'utilisation de "_" pour stocker des valeurs inutiles est courante dans Python (par exemple, foo, _ = func_returning_tuple () ayant dit cela, je préférerais _i via _ < / code>.


Méfiez-vous: Utilisation de _ pour cela lorsque vous utilisez également le GetText < / Code> Bibliothèque (ou pensant que vous pourriez l'utiliser à l'avenir) causera des problèmes. GetText utilise _ en tant que fonction de traduction i18n ( _ ("traduire ce texte") ), mais après la boucle ci-dessus _ serait soudainement 41 Au lieu de cela et l'invocation suivante constituerait une exception.


C'est ce que je faisais, mais j'espérais que quelqu'un me dirait dans une certaine direction où je n'avais pas à déclarer la variable inutilisée, plutôt que de simplement l'ignorer.


@Jacxel: Il n'y a pas de moyen «naturel» de la boucle n fois sans une variable de comptoir à Python, et vous ne devriez pas recourir à des hacks laids autour de cela. Soit simplement ignorer l'avertissement Pylint, configurez-le pour ignorer les variables non utilisées nommées i ou utilisez un préfixe, probablement le _ (moins distrayant que mannequin ).


@FerdinandBeyer Si vous mettez ce dernier commentaire comme une réponse à l'accepter. C'est ce que je demandais. Merci



8
votes

Selon pylint code> Documentation :

for dummy in range(1, 42):
    print "spam"


1 commentaires

J'ai donné cette solution dans ma question, je demande s'il y a un moyen de le faire sans jamais déclarer la variable



1
votes

Habituellement, vous pouvez y travailler, tout comme ceci dans votre cas:

>>> print "spam\n"*len(range(1,42))


4 commentaires

Mais probablement l'OP veut faire quelque chose de plus complexe, c'est un exemple simple ...


@Paulhiemstra Ce que je dis, c'est que probablement encore plus de choses complexes peuvent être faites sans les variables non utilisées. Je ne peux pas imaginer des paramètres qui ne peuvent pas être résolus sans utiliser de variables factices


Bien qu'il s'agisse probablement d'une solution de contournement, comme cela, je tente de faire autant de modifications que possible du code. Je travaille sur l'obtention d'un cadre existant jusqu'à PEP8 et je veux éviter de faire de gros changements dans les cas inutiles.


@ Luke14Free, je comprends et je suis d'accord



10
votes

Il n'y a pas de manière "naturelle" de boucler n temps sans une variable de comptoir en Python, et que vous ne devriez pas recourir à des hacks laids pour faire taire des analyseurs de code.

Dans votre cas, je suggérerais l'une des opérations suivantes:

  • Ignorez simplement l'avertissement de PYLINT (ou filtrer des avertissements signalés pour des variables d'un caractère)
  • Configurez Pylint pour ignorer les variables nommées i , qui ne sont généralement utilisés que dans pour boucles de toute façon.
  • Marquez des variables non utilisées à l'aide d'un préfixe, en utilisant probablement le _ (c'est moins distrayant que mannequin )

0 commentaires

0
votes

3 raisons simples

  1. Il n'y a aucun moyen de faire boucler votre programme sans utiliser de variable de compteur dans un pour boucle.
  2. Mais vous pouvez créer un programme qui passe à partir de index [1] à index [2] juste en ajoutant si index [1] est fait. Index de retour [] + 1 .
  3. Malheureusement, vous devez créer un programme supplémentaire qui n'est pas aussi efficace que le pour boucle et n'est pas efficace dans de longs programmes.

0 commentaires