2013-09-26 7 views
5

Ok, quindi io uso un sacco di comandi di input, e ho capito che in python2 posso fare:Differenze tra l'input dei comandi in Python 2.xe 3.x

text = raw_input ('Text here') 

Ma ora che io uso Python 3 mi chiedevo che cosa è la differenza tra:

text = input('Text here') 

e:

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

quando devo utilizzare l'uno o l'altro?

+0

Se non si era abituati a usare 'eval', per farla breve si valuta la stringa che si passa ad esso come se fosse codice. – whatyouhide

+1

Se non si usa mai 'eval()', probabilmente è OK. Se usi 'eval()', non usarlo mai su input utente non criticati. Considera cosa succede se l'utente digita 'os.system (" rm -rf/")'. –

risposta

7

In Python 3.x, raw_input è diventato input e Python 2.x's input è stato rimosso. Così, facendo questo in 3.x:

text = input('Text here') 

si sono fondamentalmente facendo questo in 2.x:

text = raw_input('Text here') 

Fare questo in 3.x:

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

è la come fare questo in 2.x:

text = input('Text here') 

Ecco un breve sommario dal Python Documenti:

PEP 3111: raw_input() è stato rinominato per input(). Cioè, la nuova funzione legge una riga da sys.stdin e la restituisce con la riga finale eliminata. Solleva EOFError se l'ingresso è terminato in modo tempestivo . Per ottenere il vecchio comportamento di input(), utilizzare eval(input()).

+0

Grazie, ma non so qual è la differenza tra raw_input e input in Python 2.x. Puoi dirmi? – PazEr80

+0

'raw_input' legge semplicemente ciò che l'utente digita e lo restituisce come una stringa. 'input' d'altra parte valuta cosa l'utente digita come vero codice Python (notare che questo è in 2.x). – iCodez

2

Questi sono equivalenti:

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

E questi sono equivalenti:

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

Si noti che in Python 3 non c'è una funzione chiamata raw_input(), come Python 3 input() è solo raw_input() rinominato. E in Python 3 non esiste un equivalente diretto di Python 2 input(), ma può essere facilmente simulato in questo modo: eval(input('Text here')).

Ora, in Python 3 la differenza tra input('Text here') e eval(input('Text here')) è che il primo restituisce la rappresentazione di stringa di ingresso immesso (con a capo finale rimosso), mentre il secondo non sicuro evaluates l'ingresso, come se fosse un'espressione inserito direttamente nell'interprete interattivo.