2013-09-26 13 views
5

Ok, więc korzystać z wielu poleceń wejściowych, a ja zrozumiałem, że w python2 mogę zrobić:Różnice między wejściem polecenia w Pythonie 2.x oraz 3.x

text = raw_input ('Text here') 

Ale teraz, że używam Python 3 zastanawiałem się, jaka jest różnica pomiędzy:

text = input('Text here') 

oraz:

text = eval(input('Text here')) 

gdy muszę użyć jednego lub drugiego?

+0

Jeśli nie byłeś przyzwyczajony do używania 'eval', długiego opowiadania, ocenia on łańcuch, który przekazujesz, tak jakby był to kod. – whatyouhide

+1

Jeśli nigdy nie używasz 'eval()', to prawdopodobnie jest OK. Jeśli używasz 'eval()', nigdy nie używaj go na niesanitarnym wprowadzaniu przez użytkownika. Zastanów się, co się stanie, jeśli użytkownik wpisze 'os.system (" rm -rf/")'. –

Odpowiedz

7

W języku Python 3.x, raw_input został input, a plik input w języku Python 2.x został usunięty. Tak więc, robiąc to w 3.x:

text = input('Text here') 

są w zasadzie robi to w 2.x:

text = raw_input('Text here') 

Robi to w 3.x:

text = eval(input('Text here')) 

jest to samo, co w 2.x:

text = input('Text here') 

Oto krótkie podsumowanie z Pythona Docs:

PEP 3111: raw_input() został przemianowany na input(). Oznacza to, że nowa funkcja odczytuje linię z sys.stdin i zwraca ją z usuniętym znakiem końca linii . Podnosi EOFError, jeśli wejście zostanie przedwcześnie zakończone . Aby uzyskać stare zachowanie input(), użyj eval(input()).

+0

Dzięki, ale nie wiem jaka jest różnica między raw_input i input w Pythonie 2.x. Czy możesz mi powiedzieć? – PazEr80

+0

'raw_input' po prostu odczytuje, co użytkownik wpisze i zwraca jako ciąg znaków. "input" z drugiej strony ocenia, co użytkownik wpisze jako prawdziwy kod w Pythonie (zauważ, że jest to w 2.x). – iCodez

2

Są równoważne:

raw_input('Text here')  # Python 2 
input('Text here')   # Python 3 

I to są równoważne:

input('Text here')   # Python 2 
eval(raw_input('Text here')) # Python 2 
eval(input('Text here'))  # Python 3 

Zauważ, że w Pythonie 3 nie jest funkcja o nazwie raw_input(), jak Pythona 3 input() tylko raw_input() zmieniono nazwę. W Pythonie 3 nie ma bezpośredniego odpowiednika Pythona 2: input(), ale można go łatwo symulować w następujący sposób: eval(input('Text here')).

Teraz Pythona 3, różnica między input('Text here') i eval(input('Text here')) że dawne powraca reprezentacja ciąg wejściowych wprowadzonych (z tylną nowalinia usunięto), a na drugim niebezpiecznym evaluates wejściu, jak gdyby były ekspresji wprowadza się bezpośrednio w interaktywnym tłumaczu.

Powiązane problemy