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

Please respond to
Konference PyCZ <[email protected]>

To
"'Konference PyCZ'" <[email protected]>
cc
Subject
Re: [python] file.next() (bylo Buducnost Pythonu: lambda, map,        filter)





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

Odpovedet emailem