[python] file.next() (bylo Buducnost Pythonu: lambda, map, filter)

Petr Prikryl PrikrylP na skil.cz
Úterý Listopad 14 12:28:07 CET 2006


Jan Matejka
> [...] je to spíš jako 
> 	for line in f.xreadlines():
> 
> Kde xreadlines() vrací iterátor, který čte soubor 
> postupně na rozdíl od readlines který přečte soubor 
> najednou do seznamu řádků.
> 
> Přidám se ale k nadávání na odstraňování starých prvků 
> jazyka.  Xreadlines je od verze 2.3 označeno za zastaralé. 
> 
> for line in file("data.txt").xreadlines():
> 	...
> 
> se mi líbí víc než preferované 
> for line in file('data.txt')
> 	...
> 
> protože "explicit is better than implicit". Xreadlines() 
> totiž vyjadřuje že se čte po řádcích a nikoliv po bytech,
> unicode znacích nebo co já vím jakých jednotkách v souboru.


3.9 File Objects 
next( ) 

A file object is its own iterator, for example iter(f) 
returns f (unless f is closed). When a file is used as 
an iterator, typically in a for loop (for example, 
for line in f: print line), the next() method is called 
repeatedly. This method returns the next input line, 
or raises StopIteration when EOF is hit. In order to make 
a for loop the most efficient way of looping over the lines 
of a file (a very common operation), the next() method 
uses a hidden read-ahead buffer.


Volný překlad: Objekt typu soubor je svým vlastním
iterátorem. Takže například iter(f) vrací f (pokud f
není uzavřen). Pokud je souborový objekt použit 
jako iterátor -- typicky v cyklu for (například
for line in f: print line), volá se opakovaně metoda next(). 
Tato metoda vrací další vstupní řádek nebo na konci
vyvolá výjimku StopIteration. Aby cyklus for mohl 
řádky souboru procházet co nejefektivněji (jde o velmi
běžnou operaci), používá metoda next() skrytou vyrovnávací
paměť pro načítání dat předem.

A k té explicitnosti -- místo xreadlines() bych sice
mohl psát __iter__(), ale...

"The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Simple is better than complex.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity."

pepr


Další informace o konferenci Python