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

MongoDB фактически хранит миллины даты как int (64), как предписано http://bsonspec.org/#/specification

Однако, это может становится довольно запутанным, когда вы извлекаете даты, поскольку клиентский драйвер будет создавать экземпляр объекта даты с его собственным местным часовым поясом. Драйвер JavaScript в консоли mongo, безусловно, сделает это.

Итак, если вы заботитесь о своих часовых поясах, убедитесь, что знаете, что это должно быть, когда вы вернетесь. Это не должно иметь большого значения для запросов, поскольку оно все равно будет соответствовать одному и тому же int (64), независимо от того, в какой временной зоне находится объект даты (надеюсь). Но я бы определенно делал запросы с объектами фактической даты (не строки), и пусть драйвер делает свое дело.

30
задан snakile 22 August 2010 в 10:55
поделиться

2 ответа

Вот так:

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.

>>>
24
ответ дан 27 November 2019 в 20:32
поделиться

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

Help on built-in function readlines:

readlines(...)
    Return a list of lines from the stream.

Для проверки просто вызовите его из интерактивного сеанса - он вернет список, а не iterator:

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

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


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

 for line in f.xreadlines():

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

 for line in f:

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

31
ответ дан 27 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: