Яка різниця між raw_input()
і input()
в Python 3?
input
в raw_input
і ігнорувати помилки імен.
Яка різниця між raw_input()
і input()
в Python 3?
input
в raw_input
і ігнорувати помилки імен.
Відповіді:
Різниця полягає в тому, raw_input()
що в Python 3.x не існує, втім input()
. Насправді, старе raw_input()
було перейменовано на input()
старе, а старе input()
вже немає, але його можна легко імітувати за допомогою eval(input())
. (Пам'ятайте, що eval()
це зло. Постарайтеся використовувати більш безпечні способи розбору ваших даних, якщо це можливо.)
raw_input
...?" - "Різниця в тому, що немає" raw_input
. ... Я б сказав, що різка різниця!
eval
(і exec
) взагалі слід уникати, оскільки вони можуть становити загрозу безпеці. Для детальної інформації дивіться, будь ласка, Eval справді небезпечний для ветерана SO Неда Батчельдера. І звичайно, ця порада стосується і старого Python 2 input
.
eval()
і для початку exec()
, але спершу потрібно зрозуміти, чому ви не повинні користуватися, eval()
перш ніж вирішити його використовувати.
В Python 2 , raw_input()
повертає рядок, і input()
намагається виконати вхід в якості вираження Python.
Оскільки отримати рядок майже завжди було те, що ви хотіли, Python 3 робить це з input()
. Як каже Свен, якщо ви хочете коли-небудь стару поведінку, eval(input())
спрацює.
raw_input()
.
raw_input()
приймає саме те, що ввів користувач, і передає його назад як рядок.
input()
спочатку бере, raw_input()
а потім виконує і eval()
його.
Основна відмінність полягає в тому, що input()
очікує синтаксично правильного твердження python, де raw_input()
цього немає.
raw_input()
було перейменовано на, input()
тому тепер input()
повертає точний рядок.input()
зняли.Якщо ви хочете використовувати старий input()
, тобто вам потрібно оцінити введення користувача як оператор python, ви повинні зробити це вручну, використовуючи eval(input())
.
У 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 намагається оцінити харшу як змінну, а не рядок. Щоб уникнути цього, ми можемо використовувати подвійні лапки навколо нашого вкладу, як "харша":
>>> 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
функції.
Я хотів би додати трохи більше деталей до пояснення, яке кожен надав для користувачів python 2 . raw_input()
, з якого ви вже знаєте, що оцінює всі дані, які користувач вводить як рядки. Це означає, що python не намагається навіть зрозуміти введені дані знову. Все, що вона врахує, - це те, що введені дані будуть рядковими, незалежно від того, чи це дійсна рядок чи int чи що-небудь.
Хоча input()
з іншого боку намагається зрозуміти дані, введені користувачем. Так що введення як helloworld
би навіть відображає помилку як " helloworld is undefined
".
На закінчення, для python 2 для введення рядка також потрібно ввести його як " helloworld
", яка є загальною структурою, що використовується в python для використання рядків.
Якщо ви хочете переконатися, що ваш код працює з 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")