системный.стандартный ввод.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, но, возможно, более приятная логика.

Я подозреваю, что в то время как различия в производительности между различными вариантами может существуют, они, как правило, меньше, чем затраты времени на простое чтение файла с диска (если он большой) и делать то, что вы делаете с ним. Я предлагаю вам избежать ловушки преждевременной оптимизации и просто сделать то, что наиболее естественно для вашей проблемы, и если программа слишком медленная (где "слишком медленная" очень субъективна), вы делаете некоторое профилирование, чтобы увидеть, что занимает больше всего времени. Не вкладывайте много усилий в решение между различными способами ввода информации, если это не так на самом деле имеет значение.