web-dev-qa-db-fra.com

Comment puis-je contourner la déclaration d'une variable inutilisée dans une boucle for?

Si j'ai une compréhension de liste (par exemple) comme celle-ci:

['' for x in myList]

Faire effectivement une nouvelle liste qui a une chaîne vide pour chaque élément d'une liste, je n'utilise jamais le x. Existe-t-il une façon plus simple d'écrire ceci, donc je n'ai pas à déclarer la variable x inutilisée?

70
Ramy

_ est un nom d'espace réservé standard pour les membres ignorés dans une affectation de boucle et de tuple, par exemple.

['' for _ in myList]

[a+d for a, _, _, d, _ in fiveTuples]

BTW votre liste pourrait être écrite sans compréhension de la liste (en supposant que vous vouliez faire une liste de membres immuables comme des chaînes, des entiers, etc.).

[''] * len(myList)
110
kennytm

Non. Comme le dit le Zen: les cas spéciaux ne sont pas assez spéciaux pour enfreindre les règles. Le cas particulier étant les boucles n'utilisant pas les éléments de la chose en cours d'itération et la règle étant qu'il y a une "cible" à décompresser.

Vous pouvez cependant utiliser _ comme nom de variable, généralement compris comme "intentionnellement inutilisé" (même PyLint etc. le sait et le respecte).

19
user395760

Il s'avère que l'utilisation de dummy* (le démarrage de Word est factice) car le nom de la variable fait la même chose que _. _ est un standard connu et il serait préférable d'utiliser des noms de variables significatifs. Vous pouvez donc utiliser dummy, dummy1, dummy_anything. En utilisant ces noms de variables, PyLint ne se plaindra pas.

12
Alfred

Si vous devez nommer vos arguments (au cas où, par exemple, lors de l'écriture de maquettes qui n'utilisent pas certains arguments référencés par leur nom), vous pouvez ajouter cette méthode de raccourci:

def UnusedArgument(_):
  pass

puis l'utiliser comme ça

def SomeMethod(name_should_remain):
  UnusedArgument(name_should_remain)
1
kateroh

Ajoutez le commentaire suivant après la boucle for sur la même ligne:

#pylint: disable = variable-inutilisée

for i in range(100): #pylint: disable=unused-variable
1
Christopher Nuzzi

Les objets générateurs n'utilisent pas réellement les variables. Donc quelque chose comme

list(('' for x in myList))

devrait faire l'affaire. Notez que x n'est pas défini comme une variable en dehors de la compréhension du générateur.

0
highBandWidth

Vous pouvez également ajouter un nom de variable avec _ si vous préférez donner à la variable un nom lisible par l'homme. Par exemple, vous pouvez utiliser _foo, _foo1, _anything et PyLint ne se plaindra pas. Dans une boucle for, ce serait comme:

for _something in range(10):
    do_something_else()

modifier: Ajouter un exemple

0
Adam Scharf