Конечно, нет, он не может быть безграничным *. Ключевая фраза из документации, что я считаю потребности на первый план является:
[...] В этом случае функции считывает строку из ввода, преобразует его в строку (отпарной завершающий символ новой строки) [... ]
(курсив мой)
Поскольку он преобразует входные вы поставку в Pythonstr
объекта, по существу переводит к: «ее размер имеет, чтобы быть меньше или равным самой большой строке, которую может создать Python ».
Причина, по которой явный размер не указан, вероятно, потому, что это деталь реализации. Обеспечение максимального размера для всех других реализаций Python не имеет большого смысла.
* В CPython, по крайней мере, наибольший размер строки ограничена, насколько велика его индекс позволено быть (см PEP 353). То есть, насколько велика цифра в скобках []
разрешено быть, когда вы пытаетесь индексироваться:
>>> s = ''
>>> s[2 ** 63]
IndexErrorTraceback (most recent call last)
<ipython-input-10-75e9ac36da20> in <module>()
----> 1 s[2 ** 63]
IndexError: cannot fit 'int' into an index-sized integer
(попробуйте предыдущий с 2 ** 63 - 1
, что это положительный приемлемый предел, -2 ** 63
является отрицательным предел.)
Для индексов это не номера Python, которые используются внутри; вместо этого это Py_ssize_t
, который является подписанным 32/64 бит int на 32/64 бит машинах соответственно. Итак, это жесткий предел того, что кажется.
(как говорится, сообщение об ошибке, Int и Intex размера целое число две разные вещи)
Кроме того, представляется, как input()
explicitly checks, если вход поступает больше, чем PY_SSIZE_T_MAX
(максимальный размер Py_ssize_t
) перед преобразованием:
if (len > PY_SSIZE_T_MAX) {
PyErr_SetString(PyExc_OverflowError,
"input: input too long");
result = NULL;
}
Затем он преобразует входные данные в Python str
с PyUnicode_Decode
.
Чтобы представить это в перспективе для вас; если средняя книга длиной 500.000
символов и estimation за общее количество книг составляет около 130 миллионов вы могли бы теоретически input
вокруг:
>>> ((2 ** 63) - 1) // 500000 * 130000000
141898
раз эти символы; вероятно, вам понадобится некоторое время :-) (и вы будете ограничены доступной памятью в первую очередь!)
Связанный: http://stackoverflow.com/q/1739913/5647260 – Li357
«* после многократного копирования *« вы пробовали [перенаправление stdin] (http://stackoverflow.com/a/15680903/1013719)? –
У меня не было @RyanHaining спасибо за это! – user6774416