#python-3.x #stdin
#python-3.x #stdin
Вопрос:
import sys
data = []
for line in sys.stdin:
data.append(line)
Я не использовал .read()
или .readline()
, но этот код работает для чтения данных. Он считывает данные построчно. Входные данные разделяются на 'n'
. данные вводятся пользователем. например, ‘input ()’ .
Мой вопрос:
- Это
.read()
.readline()
необходимо или нет? - Интересно, почему
for
цикл работаетsys.stdin
и как он считывает данные построчно?
Ответ №1:
Если вы посмотрите на документацию sys
, вы увидите, что sys.stdin
(и sys.stdout
/ sys.stderr
) — это просто файловые объекты.
Эти потоки представляют собой обычные текстовые файлы, подобные тем, которые возвращаются
open()
функцией.
В документации о open()
говорится:
Тип файлового объекта, возвращаемого
open()
функцией, зависит от режима. Когдаopen()
используется для открытия файла в текстовом режиме (‘w’, ‘r’, ‘wt’, ‘rt’ и т.д.), Он возвращает подклассio.TextIOBase
(io.TextIOWrapper
в частности).
TextIOWrapper
наследуется от IOBase
, у которого есть __iter__
метод. Этот __iter__
метод позволяет перебирать строки в файле. Я не могу найти, где это указано в документации Python, но оно приведено в исходном коде для IOBase.
IOBase (и его подклассы) поддерживают протокол итератора, что означает, что объект IOBase можно перебирать, получая строки в потоке.