2012-04-12 26 views
5

si necesito un bucle for en Python¿cómo se hace un bucle For cuando no se necesita índice en Python?

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

pero no uso la "i" para cualquier cosa pylint se queja de la variable sin utilizar. ¿Cómo debería manejar esto? Sé que puede hacer esto:

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

pero hacer esto me parece bastante extraño, ¿hay una manera mejor?

Soy bastante nuevo en python, así que perdónenme si me falta algo obvio.

+1

Esto es muy subjetivo. Utilice un prefijo '_' o' dummy', o elija un esquema diferente y establezca la opción '--dummy-variables-rgx' de PyLint en consecuencia (por ejemplo,' unused_'). –

+0

En realidad, dado que se usa "i", y es una parte necesaria de la sintaxis en la declaración 'for', la única cosa _dummy_ alrededor es la propia pylint. Aconsejaría colocar esto como un informe de error en el proyecto de pilisis. – jsbueno

Respuesta

5

No hay manera "natural" al bucle n veces sin una variable de contador en Python, y no se debe recurrir a hacks feo sólo para silenciar analizadores de código.

En su caso yo sugeriría una de las siguientes:

  • simplemente ignorar la pylint advertencia (o filtro informado advertencias para las variables de un solo carácter)
  • Configurar pylint hacer caso omiso de las variables con nombre i, que son usualmente solo se usa en los bucles for de todos modos.
  • Marcar las variables utilizadas utilizando un prefijo, probablemente usando el valor por defecto _ (que es menos molesto que dummy)
10
for _ in range(1,42): 
    print "spam" 
+0

Pensé que podría reconocerlo ya que se usa tradicionalmente cuando no se usa la variable. – jamylak

+6

+1: con la configuración predeterminada, PyLint no se queja de las variables no utilizadas que comienzan con "ficticio" o "_". Usar "\ _" para almacenar valores innecesarios es común en Python (ej. 'Foo, _ = func_returning_tuple()' Habiendo dicho esto, preferiría '_i' sobre plain' _'. –

+6

Cuidado: usando '_' para esto cuando también el uso de la biblioteca ['gettext'] (http://docs.python.org/library/gettext.html) (o pensar que puede usarlo en el futuro) causará problemas. Gettext usa' _' como una traducción i18n función ('_ (" Traducir este texto ")'), pero después del bucle de arriba '_' de repente sería 41 y la siguiente invocación generaría una excepción. –

6

Según pylint documentation:

 
--dummy-variables-rgx= 
      A regular expression matching names used for dummy variables (i.e. 
      not used). [current: _|dummy] 

En otras palabras, si el nombre de la variable comienza con un guión, o con las letras dummy, pylint habría no se quejan de estar sin usar la variable:

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

di esa solución en mi pregunta, estoy preguntando si hay una manera de hacerlo sin declarar nunca la variable – Jacxel

1

Por lo general, puede solucionarlo, así como en su caso:

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

Pero probablemente el OP quiere hacer algo más complejo, siendo esto un simple ejemplo ... –

+0

@PaulHiemstra what Lo que digo es que probablemente se puedan hacer cosas aún más complejas sin las variables no utilizadas. No puedo imaginar configuraciones que no se puedan resolver sin usar las variables ficticias – luke14free

+0

, aunque probablemente haya una solución como esta, estoy tratando de hacer el menor número posible de cambios en el código. Estoy trabajando para conseguir un marco existente hasta pep8 y quiero evitar hacer grandes cambios donde sea innecesario. – Jacxel

0

3 razones simples

  1. No hay forma de bucle a través de su programa sin utilizar una variable de contador en un bucle for.
  2. Pero puede crear un programa que va desde index[1] hasta index[2] con solo agregar if index[1] hecho. return index[]+1.
  3. Desafortunadamente, necesita crear un programa adicional que no sea tan eficiente como el bucle for y no sea eficiente en programas largos.
Cuestiones relacionadas