Jaka jest różnica między raw_input()
i input()
w Pythonie 3?
python
python-3.x
input
pkumar
źródło
źródło
input
doraw_input
ignorować błędy nazw.Odpowiedzi:
Różnica polega na tym, że
raw_input()
nie istnieje w Pythonie 3.x, podczas gdyinput()
robi. W rzeczywistości staryraw_input()
został przemianowanyinput()
na stary, a staryinput()
zniknął, ale można go łatwo symulować za pomocąeval(input())
. (Pamiętaj, żeeval()
to zło. Spróbuj zastosować bezpieczniejsze sposoby analizowania danych wejściowych, jeśli to możliwe).źródło
raw_input
...?” - „Różnica polega na tym, że nie maraw_input
”. ... Całkiem drastyczna różnica, powiedziałbym!eval
(iexec
) należy zasadniczo unikać, ponieważ może to stanowić zagrożenie bezpieczeństwa. Aby uzyskać szczegółowe informacje, zobacz Eval jest naprawdę niebezpieczny dla weterana SO Neda Batcheldera. I oczywiście ta rada dotyczy również starego Pythona 2input
.eval()
iexec()
, ale najpierw musisz zrozumieć, dlaczego nie powinieneś używaćeval()
przed podjęciem decyzji o użyciu.W Pythonie 2 ,
raw_input()
zwraca ciąg znaków iinput()
próbuje uruchomić wejście jako wyrażenie Pythona.Ponieważ otrzymywanie łańcucha było prawie zawsze tym, czego chciałeś, Python 3 robi to z
input()
. Jak mówi Sven, jeśli kiedykolwiek chcesz starego zachowania,eval(input())
działa.źródło
raw_input()
.Python 2:
raw_input()
pobiera dokładnie to, co wpisał użytkownik i przekazuje z powrotem jako ciąg.input()
najpierw bierze,raw_input()
a następnie wykonujeeval()
na nim również.Główną różnicą jest to, że
input()
oczekuje poprawnej składni instrukcji Pythona, w przypadkuraw_input()
gdy nie.Python 3:
raw_input()
został przemianowany na,input()
więc terazinput()
zwraca dokładny ciąg.input()
zostało usunięte.Jeśli chcesz użyć starego
input()
, co oznacza, że musisz ocenić dane wejściowe użytkownika jako instrukcję python, musisz to zrobić ręcznie, używająceval(input())
.źródło
W Pythonie 3
raw_input()
nie istnieje, o czym wspomniał Sven.W Pythonie 2
input()
funkcja ocenia dane wejściowe.Przykład:
W powyższym przykładzie Python 2.x próbuje ocenić harsha jako zmienną, a nie ciąg znaków. Aby tego uniknąć, możemy użyć podwójnych cudzysłowów wokół naszych danych wejściowych, takich jak „harsha”:
raw_input ()
Funkcja raw_input () `nie ocenia, po prostu odczyta wszystko, co wpiszesz.
Przykład:
Przykład:
W powyższym przykładzie próbowałem tylko ocenić dane wejściowe użytkownika za pomocą tej
eval
funkcji.źródło
Chciałbym dodać trochę więcej szczegółów do wyjaśnienia udzielonego przez wszystkich użytkownikom python 2 .
raw_input()
, który do tej pory wiesz, że ocenia, jakie dane użytkownik wprowadza jako ciąg. Oznacza to, że python nie próbuje nawet zrozumieć wprowadzonych danych. Wszystko, co weźmie pod uwagę, to to, że wprowadzone dane będą ciągiem znaków, bez względu na to, czy jest to ciąg rzeczywisty, int, czy cokolwiek innego.Z
input()
drugiej strony próbuje zrozumieć dane wprowadzone przez użytkownika. Więc dane wejściowehelloworld
pokazałyby nawet błąd jako „helloworld is undefined
”.Podsumowując, w przypadku Pythona 2 również w celu wprowadzenia łańcucha należy wprowadzić ciąg podobny do „
helloworld
”, który jest wspólną strukturą używaną w Pythonie do używania ciągów.źródło
Jeśli chcesz się upewnić, że Twój kod działa z python2 i python3, użyj funkcji input () w skrypcie i dodaj to na początku skryptu:
źródło