[python] Na vsetko cyklus for ?

Roman Miklos RMiklos na pss.sk
Úterý Listopad 14 18:01:04 CET 2006


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" <matejka na cat.cz> 
Sent by: python-bounces na py.cz
14.11.2006 17:05
Please respond to
Konference PyCZ <python na py.cz>


To
"'Konference PyCZ'" <python na py.cz>
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
Python na py.cz
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 
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20061114/1ae4c122/attachment.htm 


Další informace o konferenci Python