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 _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python