Возвращает ли readlines () список или итератор в Python 3?

Я читал в «Dive into Python 3», что «Метод readlines () теперь возвращает итератор, поэтому он так же эффективен, как и xreadlines () в Python 2». См. Здесь: http://diveintopython3.org/porting-code-to-python-3-with-2to3.html . Я не уверен, что это правда, потому что они не упоминают об этом здесь: http://docs.python.org/release/3.0.1/whatsnew/3.0.html . Как я могу это проверить?

    3 Solutions collect form web for “Возвращает ли readlines () список или итератор в Python 3?”

    Как это:

    Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> f = open('/junk/so/foo.txt') >>> type(f.readlines()) <class 'list'> >>> help(f.readlines) Help on built-in function readlines: readlines(...) Return a list of lines from the stream. hint can be specified to control the number of lines read: no more lines will be read if the total size (in bytes/characters) of all lines so far exceeds hint. >>> 

    Метод readlines не возвращает итератор в Python 3, он возвращает список

     Help on built-in function readlines: readlines(...) Return a list of lines from the stream. 

    Чтобы проверить, просто вызовите его из интерактивного сеанса – он вернет список, а не итератор:

     >>> type(f.readlines()) <class 'list'> 

    В этом случае погружение в Python оказывается неправильным.


    xreadlines устарела после Python 2.3, когда файловые объекты стали их собственными итераторами. Способ получить ту же эффективность, что и xreadlines , вместо использования

      for line in f.xreadlines(): 

    вы должны просто использовать

      for line in f: 

    Это дает вам итератор, который вы хотите, и помогает объяснить, почему readlines не нужно менять свое поведение в Python 3 – он все равно может вернуть полный список, причем line in f идиоме дает итеративный подход, устаревшие xreadlines полностью удалены.

    Другие уже сказали, что уже много, но просто для того, чтобы проехать домой, обычные файловые объекты являются их собственными итераторами. Поэтому, если readlines() возвращает итератор, это будет глупо, потому что он просто вернет файл, на который вы его вызвали. Вы можете использовать цикл for для итерации по файлу, как сказал Скотт, и вы также можете передать их прямо в функции itertools:

     from itertools import islice f = open('myfile.txt') oddlines = islice(f, 0, None, 2) firstfiveodd = islice(oddlines, 5) for line in firstfiveodd: print(line) 
    Python - лучший язык программирования в мире.