[python] for-else -> wtf?

Michal Molhanec molhanec na seznam.cz
Středa Duben 23 15:49:54 CEST 2008


Dusan Zatkovsky napsal(a):
> DD.
> 
> Riesili sme tu s kolegami jeden priklad, ktory na prvy pohlad bol syntakticky 
> nespravne. Potom som na neho narazil na 
> http://docs.python.org/tut/node6.html#SECTION006400000000000000000 a z 
> dokumentacie som zistil, ze je dokonca syntakticky spravne.
> 
> Tak som sa s for-else chcel zoznamit a tak som si vytvoril 3 testcase:
> 
> # cyklus sa vykona
> for x in 'a':
> 	pass
> else:
> 	print "test1"
> 
> # cyklus sa vykona a breakne
> for x in 'a':
> 	break
> else:
> 	print "test2"
> 
> # cyklus sa nevykona
> for x in '':
> 	pass
> else:
> 	print "test3"
> 
> 
> Vysledok zodpoveda tomu, co vravi dokumentacia, ale mne to pride zvratene.
> 
> Preco to else zavisi na break vo vnutri cyklu a nie na tom, ci sa cyklus 
> vykonal, alebo nie? Ked totiz na toto narazi niekto, kto sa python uci, tak 
> sa z toho osype ( pisem prilezitostne v pythone uz 2 roky a je to aj moj 
> pripad ).
> 
> 
> Mozete mi niekto ozrejmit, co tym autor myslel a preco je ta logika postavena 
> prave takto? Intuicia mi totiz hovori, ze else by sa malo vykonat prave ked 
> sa nevykona ani jeden priebeh cyklu...

0 pruchodu cyklem je typicky OK

predstavme si napr. nejake hledani

for i in nekde:
   if nasel(i):
     print "Nasel"
     break
else:
   print "Nenasel"

tohle bude fungovat i pokud nekde bude prazdne


Další informace o konferenci Python