2010-09-27 43 views
7

In un tutorial, ho letto che c'è una differenza tra input e raw_input. Ho scoperto che hanno cambiato il comportamento di queste funzioni in Python 3.0. Qual è il nuovo comportamento?Differenze tra `input` e` raw_input`

E perché l'interprete python console questo

x = input() 

mandate un errore, ma se l'ho messo in un file.py ed eseguirlo, non è così?

risposta

14

In pitone 2.x, raw_input() restituisce una stringa e input() valuta l'ingresso nel contesto di esecuzione in cui è chiamato

>>> x = input() 
"hello" 
>>> y = input() 
x + " world" 
>>> y 
'hello world' 

In pitone 3.x, input è stato scartato e la funzione precedentemente conosciuto come raw_input è ora input. Quindi devi chiamare manualmente lo compile e lo eval se vuoi la vecchia funzionalità.

python2.x     python3.x 

raw_input() --------------> input()    
input() -------------------> eval(input())  

In 3.x, la sessione sopra va come questo

>>> x = eval(input()) 
'hello' 
>>> y = eval(input()) 
x + ' world' 
>>> y 
'hello world' 
>>> 

Così si erano probabilmente trovato un errore al interprete perché non stavano mettendo le virgolette intorno al vostro ingresso. Questo è necessario perché è valutato. Dove ricevi un errore di nome?

+0

cosa succede qui ho provato la tua linee sulla console (3.x) e ha interpretato x = input() "ciao" <- scrivo questo sulla console quando richiesto) x + "mondo" y 'x + "mondo" Perché? x non è tradotto in una stringa –

+0

l'errore mi è stato sempre >>> x = input() Traceback (chiamata più recente scorso): file "", linea 1, in EOFError: EOF durante la lettura di una linea –

+0

@Guillermo, la sezione interprete che ho mostrato è per 2.x. Ho incasinato 3.x (non ho giocato molto con esso) quindi ho cancellato quella parte della mia risposta. – aaronasterling

3

input() vs raw_input()

raw_input raccoglie i caratteri digitati dall'utente e li presenta sotto forma di stringa. input() non valuta solo i numeri, ma tratta qualsiasi input come codice Python e tenta di eseguirlo. Utente esperto ma malintenzionato potrebbe digitare un comando Python che può anche eliminare un file. Passa a raw_input() e converti la stringa nel tipo di dati necessario utilizzando le funzioni di conversione incorporate di Python.

Anche input(), non è sicuro da errori dell'utente! Si aspetta un'espressione Python valida come input; se l'input non è sintatticamente valido, verrà sollevato un SyntaxError.

3

sua semplice:

  1. raw_input() rendimenti valori stringa
  2. mentre valori input() ritorno intero

Per esempio:

1.

x = raw_input("Enter some value = ") 
print x 

Uscita:

Enter some value = 123 
'123' 

2.

y = input("Enter some value = ") 
print y 

uscita:

Enter some value = 123 
123 

Quindi se eseguiamo x + x = Sarà emesso come 123123

mentre se si eseguono y + y = Sarà uscita come 246

+0

Forse su python 2.x, ma non su python 3.x. input() in python 3.x restituisce sempre una stringa. Inoltre, raw_input() è stato eliminato da python 3 –