Яка різниця між 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")