[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