2012-04-12 7 views
5

se ho bisogno di un ciclo for in pythoncome si fa un ciclo For quando non si ha bisogno dell'indice in python?

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

ma non usare la "i" per qualsiasi cosa pylint lamenta la variabile inutilizzata. Come dovrei gestirlo? So che puoi fare questo:

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

ma farlo mi sembra abbastanza strano, c'è un modo migliore?

Sono abbastanza nuovo in pitone quindi perdonami se mi manca qualcosa di ovvio.

+1

Questo è altamente soggettivo. O usate un prefisso '_' o' dummy', o decidete su uno schema diverso e impostate l'opzione '--dummy-variables-rgx' di PyLint di conseguenza (ad esempio,' unused_'). –

+0

In realtà, dato che "i" è usato, ed è una parte necessaria della sintassi nell'istruzione 'for', l'unica cosa _dummy_ attorno è la stessa di pylint. Suggerirei di inserirlo come segnalazione di bug nel progetto pylint. – jsbueno

risposta

5

Non v'è alcun modo "naturale" per ciclo n volte senza una variabile contatore in Python, e non si dovrebbe ricorrere a hack brutto solo per mettere a tacere analizzatori di codice.

Nel tuo caso vorrei suggerire una delle seguenti opzioni:

  • ignorare il pylint avviso (o un filtro riportato avvertenze per le variabili di un carattere)
  • Configura pylint di ignorare variabili denominate i, che sono solitamente utilizzato solo nei loop for.
  • Segna variabili inutilizzate utilizzando un prefisso, probabilmente utilizzando il default _ (è meno fastidioso rispetto dummy)
10
for _ in range(1,42): 
    print "spam" 
+0

Pensato che potrebbe riconoscerlo dal momento che è tradizionalmente utilizzato quando non si ha alcun uso della variabile. – jamylak

+6

+1: con le impostazioni predefinite, PyLint non si lamenta delle variabili non utilizzate che iniziano con "dummy" o "_". L'uso di "\ _" per memorizzare valori non necessari è comune in Python (ad es. 'Foo, _ = func_returning_tuple()' Detto questo, preferirei '_i' semplicemente '_'. –

+6

Attenzione: usare' _' per questo quando anche usando la libreria ['gettext'] (http://docs.python.org/library/gettext.html) (o pensando che potresti usarlo in futuro) causerai problemi. Gettext usa' _' come un traduttore i18n funzione ('_ (" Traduci questo testo ")'), ma dopo il ciclo precedente '_' diventerebbe improvvisamente 41 e l'invocazione successiva genererebbe un'eccezione –

6

Secondo pylint documentation:

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

In altre parole, se il nome della variabile inizia con un trattino, o con le lettere dummy, pylint sarebbe non lamentare la variabile essendo inutilizzato:

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

ho dato questa soluzione nella mia domanda, sto chiedendo se c'è un modo per farlo senza mai dichiarare la variabile – Jacxel

1

di solito si può lavorare intorno ad esso, proprio come questo nel tuo caso:

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

Ma probabilmente l'OP vuole fare qualcosa di più complesso, essendo questo un semplice esempio ... –

+0

@PaulHiemstra cosa Sto dicendo che probabilmente le cose ancora più complesse possono essere fatte senza le variabili inutilizzate. Non riesco a immaginare le impostazioni che non possono essere risolte senza utilizzare le variabili dummy – luke14free

+0

mentre probabilmente c'è una soluzione alternativa come questa, sto cercando di apportare il minor numero possibile di modifiche al codice. Sto lavorando per ottenere un framework esistente fino a pep8 e voglio evitare di apportare grandi cambiamenti laddove non necessario. – Jacxel

0

3 semplici ragioni

  1. non c'è modo per eseguire un ciclo attraverso il vostro programma senza utilizzare una variabile contatore in un ciclo for.
  2. Ma è possibile creare un programma che va da index[1] a index[2] semplicemente aggiungendo if index[1]. return index[]+1.
  3. Sfortunatamente, è necessario creare un programma aggiuntivo che non sia efficiente come il ciclo for e non sia efficiente nei programmi lunghi.
Problemi correlati