Povodne je for-cyklus v Pythone cyklus iterujuci cez zoznam, t.j. analogia cyklu foreach v Perle.
Preto sa mi predsa len spaja ten for aj pri citani suboru vzdy so zoznamom. Nedavno bolo este typicky pytonovske toto
lines=f.readlines()
for line in lines:
...
teda najprv sa nacital cely subor do zoznamu a potom sa prechadzal riadok po riadku. Toto moze byt pri niektorych ulohach vhodne, avsak vseobecne je to blbost.
Ked neskor teda bolo napriklad zavedene toto
for line in file("data.txt"):
...
t.j. tento cyklus cita riadok po riadku, je to zasa len odchylka oproti povodnemu cyklu for (ktory iteroval cez zoznam), takze zaciatocnik v Pythone si musi pamatat rozne vynimky typu: "for iteruje cez zoznam, ale 'for line in file("data.txt")' cita subor po riadkoch" /inac by si mohol mysliet, ze file("data.txt") vracia zoznam, co nie je pravda, lebo je to ekvivalentne s open("data.txt")/
Takze ked to zhrnieme mame teraz takuto situaciu:
# cita subor po riadkoch
for line in file('data.txt'):
...
# vrati naprv zoznam riadkov a iteruje cez tento zoznam
for line in file('data.txt').readlines():
...
Myslim si, ze citat subor po riadkoch alebo najprv vsetky riadky nacitat do zoznamu a potom ho prechadzat je dost velky rozdiel.
A ked sa obe tieto veci robia cez for .. zavadza to zbytocny zmatok, nie?
Podla mna by bolo ovela jasnejsie zaviest na citanie po riadkoch:
while line = f.readline():
...
| "Jan Matejka"
<[EMAIL PROTECTED]>
Sent by: [EMAIL PROTECTED] 14.11.2006 17:05
|
|
Ono obecnější řešení je udělat parsovací generátory, které by šly použít s
čímkoliv file-like jako vstupním prametrem, a nestrkat parsování to objektu
file. Tedy:
místo
> for line in file("data.txt").lines():
> ...
by bylo:
for line in lines(file("data.txt")):
...
místo
> #cteni po UTF znacich
> for char in file("data.txt").chars():
by bylo:
for char in chars(file("data.txt")):
atd.
Výpočetní náročnost by zústala stejná. Generátory mi přijdou jako skvělý
nástroj, škoda že se GvR brání zobecnění do více úrovní zanoření jenž nabízí
stackless python.
Jan Matějka
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python
Mgr. Ing. Roman MIKLÓŠ
Prvá stavebná sporiteľňa a.s.
Bajkalská 30, P. O. Box 48
829 48 Bratislava 25
Tel.: +421/ 2 / 582 31 174
Fax: +421/ 2 / 582 31 109
_______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
