Non sto chiedendo delle regole di scoping di Python; Comprendo in generale come funziona l'ambito in Python per i loop. La mia domanda è: perché le decisioni di progettazione sono state prese in questo modo. Ad esempio (nessun gioco di parole previsto):
for foo in xrange(10):
bar = 2
print(foo, bar)
Quanto sopra verrà stampato (9,2).
Questo mi sembra strano: 'foo' sta davvero controllando il loop e 'bar' è stato definito all'interno del loop. Posso capire perché potrebbe essere necessario che "bar" sia accessibile al di fuori del loop (altrimenti, i loop avrebbero funzionalità molto limitate). Quello che non capisco è perché è necessario che la variabile di controllo rimanga nell'ambito dopo la chiusura del ciclo. Nella mia esperienza, ingombra semplicemente lo spazio dei nomi globale e rende più difficile rintracciare gli errori che verrebbero rilevati dagli interpreti in altre lingue.
for
loop ingombra il tuo spazio dei nomi globale, avvolgilo in una funzione. Chiusure a bizzeffe!