2010-07-13 16 views
25
for number in range(1,101): 
print number 

Qualcuno può spiegarmi perché il codice sopra riportato stampa 1-100? Comprendo che la funzione intervallo esclude l'ultimo numero nell'intervallo specificato, tuttavia qual è la parte 'numero' della sintassi?In Python, come funziona un ciclo for con `range`?

io sono più abituati a C++ & Java dove avrei scritto il codice come:

for (i = 1; i<101; i++) { 
    return i; 
    i++; 
} 

Che cosa è esattamente 'numero'? Sono sicuro che sto guardando troppo in questo e c'è una domanda semplice.

+5

Questo snippet Java/C++ smetterà di essere eseguito prima del primo 'i ++' a causa del 'return'. – detly

risposta

20

number è equivalente a i nel loop C, cioè, è una variabile che contiene il valore di ogni iterazione del ciclo.

Una semplice traduzione del vostro codice Python a C si tradurrebbe in qualcosa in queste righe:

for (int number = 1; number < 101; number++) { 
    printf("%d\n", number); 
} 
+0

Grazie amico. Questo lo rende più facile. Qual è il processo di incremento? – TopChef

+2

range() restituisce una sequenza (un'astrazione che si comporta come un elenco di numeri) e "per il numero in ..." si dice "itera sulla sequenza". Non esiste un esatto analogo alla sequenza nella versione C, ma la relazione tra gli elementi della sequenza di intervalli è dove avviene l'incremento. –

8

Python 2.7 documentation Uniti:

range ([start], stop [, step]) ¶

Questa è una funzione versatile per creare elenchi contenenti progressioni aritmetiche . Viene spesso utilizzato in per i loop. Gli argomenti devono essere semplici numeri interi . Se l'argomento del passo è omesso, il valore predefinito è 1. Se l'argomento di avvio è omesso, il valore predefinito è su 0. Il modulo completo restituisce un elenco di numeri interi [avvio, avvio + passaggio, avvio + 2 * passaggio , ...]. Se il passaggio è positivo , l'ultimo elemento è avvio più grande + i * passaggio inferiore a stop; se il passo è negativo, l'ultimo elemento è il più piccolo punto di partenza + i * superiore alla fermata. passo non deve essere zero (altrimenti viene sollevata un'eccezione ValueError)

EDIT: Si potrebbe anche voler guardare xrange. EDIT: Quindi, fondamentalmente:

for (start ; stop ; step) 
range(start, stop, step) // where start and step are optional 
0

numero è una variabile in cui è collocato ciascun valore nell'intervallo.

l'intervallo restituisce effettivamente un iteratore e il for è responsabile dell'avanzamento attraverso l'intervallo.

0

gamma è la lista dei numeri da 1 a 100.

number quindi fa riferimento a ciascun oggetto in tale elenco

1

Come ha detto JG, numero è la variabile (molto simile i nel codice C). Un ciclo for in python è davvero come un ciclo foreach in C# (penso che anche Visual C++ lo abbia). Fondamentalmente, itera su un contenitore. Così si può utilizzare la sintassi che con le liste troppo:

fib = [0,1,1,2,3,5,8] 
for number in fib: 
    print number 

Una gamma oggetto si comporta come una sorta di contenitore, contenente tutti i numeri tra A e B.

1

Questo è un problema un po 'di confusione per i nuovi programmatori in Python che hanno esperienza in orientata agli oggetti o alle lingue procedurali (c, Java ecc)

La differenza tra quelle lingue è che Python non supporta un "conteggio "-come per l'iterazione che viene costantemente utilizzato in C, Java ecc:

for(i = 0; i < 10; i++){ 
... 
} 

al contrario, Python implementa solo per quello è simile all'interfaccia Iterator dei linguaggi orientati agli oggetti (programmatori Java saranno familiarità con questo):

for object in object_list 
    .... 

Quindi, nel tuo esempio "range" [1101] è la lista (Object_List) contenente tutti i numeri da 1 a 100 e "numero" è l'iteratore (oggetto) che prende il posto di ognuno numero