Bezdepbonusu7Программирование: статьи и ответы

Вопрос

В чем разница между raw_input () и input () в Python 3?

Автор вопроса: pkumarОтветов: 6

В чем разница между raw_input() и input() в Python 3?

  • Как сделать программу, которая принимает входные данные, совместимую как с Python 2, так и с Python 3? Solomon Ucko 04.05.2016
  • Для этого вы пытаетесь установить input в raw_input и игнорировать ошибки имени. Solomon Ucko 04.05.2016
  • Найдите библиотеку 'six' для совместимости с python 2 и 3. Jack Homan 03.11.2017

pythoninput

Ответы

Ответ 1 · рейтинг 437 · Sven Marnach

Разница в том, что raw_input() не существует в Python 3.x, а input() существует. Фактически, старый raw_input() был переименован в input(), а старый input() исчез, но его можно легко смоделировать с помощью eval(input()). (Помните, что eval() - зло. Если возможно, постарайтесь использовать более безопасные способы анализа вводимых данных.)

Ответ 2 · рейтинг 195 · Thomas K

В Python 2 raw_input() возвращает строку, а input() пытается выполнить ввод как выражение Python.

Поскольку получение строки почти всегда было тем, что вам нужно, Python 3 делает это с input(). Как говорит Свен, если вам когда-нибудь понадобится старое поведение, eval(input()) сработает.

Ответ 3 · рейтинг 120 · screenglow

Python 2

  • raw_input() берет именно то, что ввел пользователь, и возвращает это в виде строки.

  • input() сначала берет raw_input(), а затем также выполняет eval().

Основное отличие состоит в том, что input() ожидает синтаксически правильного оператора python, а raw_input() - нет.

Python 3

  • raw_input() был переименован в input(), поэтому теперь input() возвращает точную строку.
  • Старый input() был удален.

Если вы хотите использовать старый input(), что означает, что вам нужно оценить ввод пользователя как оператор Python, вы должны сделать это вручную, используя eval(input()).

Ответ 4 · рейтинг 29 · hackwithharsha

В Python 3 raw_input() не существует, о чем уже упоминал Свен.

В Python 2 функция input() оценивает ваш ввод.

Пример:

name = input("what is your name ?")
what is your name ?harsha

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    name = input("what is your name ?")
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

В приведенном выше примере Python 2.x пытается оценить harsha как переменную, а не строку. Чтобы этого избежать, мы можем заключить наш ввод в двойные кавычки, например "harsha":

>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha

raw_input ()

Функция raw_input () `не оценивает, она просто считывает все, что вы вводите.

Пример:

name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'

Пример:

 name = eval(raw_input("what is your name?"))
what is your name?harsha

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    name = eval(raw_input("what is your name?"))
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

В приведенном выше примере я просто пытался оценить ввод пользователя с помощью функции eval.

Ответ 5 · рейтинг 7 · Rubal

Я хотел бы добавить немного подробностей к объяснениям, предоставленным всеми для пользователей python 2. raw_input(), который, как вы уже знаете, оценивает все данные, которые пользователь вводит в виде строки. Это означает, что python даже не пытается снова понять введенные данные. Все, что он будет учитывать, это то, что введенные данные будут строкой, независимо от того, является ли это фактической строкой, int или чем-то еще.

В то время как input() с другой стороны пытается понять данные, введенные пользователем. Таким образом, ввод типа helloworld даже покажет ошибку как "helloworld is undefined".

В заключение, для python 2, чтобы ввести строку, вам необходимо ввести ее как 'helloworld', что является общей структурой, используемой в python для использования строк.

Ответ 6 · рейтинг 4 · Josef Klotzner

Если вы хотите убедиться, что ваш код работает с python2 и python3, используйте функцию input () в своем скрипте и добавьте это в начало вашего скрипта:

from sys import version_info
if version_info.major == 3:
    pass
elif version_info.major == 2:
    try:
        input = raw_input
    except NameError:
        pass
else:
    print ("Unknown python version - input function not safe")

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы