системный.стандартный ввод.readline () и input (): какой из них быстрее при чтении строк ввода и почему?
Я пытаюсь решить, какой из них использовать, когда мне нужно получить строки ввода от STDIN, поэтому мне интересно, как мне нужно выбирать их в разных ситуациях.
Я нашел предыдущий пост (https://codereview.stackexchange.com/questions/23981/how-to-optimize-this-simple-python-program) говоря это:
Как я могу оптимизировать этот код с точки зрения времени и используемой памяти? Обратите внимание, что я использую другую функцию ввода, как системный.стандартный ввод.readline() является самым быстрым при чтении строк и input () при чтении целых чисел.
Это утверждение верно ?
1 ответов
строение input
и sys.stdin.readline
функции не делают то же самое, и какой из них быстрее, может зависеть от деталей именно того, что вы делаете. As aruisdante прокомментировал, разница меньше в Python 3, чем в Python 2, когда цитата, которую вы предоставляете, была ОТ, но все еще есть некоторые различия.
первая разница в том, что input
имеет необязательный параметр приглашения, который будет отображаться, если интерпретатор запущен интерактивно. Это приводит к некоторым накладным расходам, даже если приглашение пустое (по умолчанию). С другой стороны, это может быть быстрее, чем делать print
перед каждым readline
позвоните, если вам нужна подсказка.
следующая разница в том, что input
удаляет любую новую строку с конца ввода. Если вы собираетесь раздеть это в любом случае, это может быть быстрее, чтобы input
сделать это для вас, а не делать sys.stdin.readline().strip()
.
окончательная разница заключается в том, как указывается конец ввода. input
выдает EOFError
когда вы называете его, если нет больше ввода (stdin был закрыт на другом конце). sys.stdin.readline
С другой стороны, вернет пустую строку в EOF, которую вам нужно знать, чтобы проверить.
существует также третий вариант, используя протокол итерации файлов на sys.stdin
. Это, вероятно, будет очень похоже на calling readline
, но, возможно, более приятная логика.
Я подозреваю, что в то время как различия в производительности между различными вариантами может существуют, они, как правило, меньше, чем затраты времени на простое чтение файла с диска (если он большой) и делать то, что вы делаете с ним. Я предлагаю вам избежать ловушки преждевременной оптимизации и просто сделать то, что наиболее естественно для вашей проблемы, и если программа слишком медленная (где "слишком медленная" очень субъективна), вы делаете некоторое профилирование, чтобы увидеть, что занимает больше всего времени. Не вкладывайте много усилий в решение между различными способами ввода информации, если это не так на самом деле имеет значение.