2011-02-06 11 views
274

¿Cuál es la diferencia entre raw_input() y input() en python3.x?¿Cuál es la diferencia entre raw_input() y input() en python3.x?

+1

¿Cómo se hace un programa que tenga en cuenta tanto Python 2 como Python 3 compatibles? –

+1

Para hacer eso, intenta establecer 'input' en' raw_input' e ignorar los errores de nombre. –

+1

Busque la biblioteca 'six' para compatibilidad con python 2 y 3. –

Respuesta

325

La diferencia es que raw_input() no existe en Python 3.x, mientras que input() sí. En realidad, el antiguo raw_input() se ha renombrado como input(), y el antiguo input() se ha ido, pero se puede simular fácilmente usando eval(input()). (Recuerde que eval() es malo, por lo que si intenta utilizar formas más seguras de analizar su entrada si es posible.)

+55

"¿Cuál es la diferencia entre' raw_input' ...? " - "La diferencia es que no hay' raw_input'. " ... ¡Una gran diferencia drástica, diría! –

+8

En Python 2 supongo que supusieron que los programadores querían realmente "ejecutar" como un comando la entrada del usuario, ya que inicialmente (supongo) que la solicitud del usuario podría ser solo para eso. Pero cuando se dieron cuenta de que los programadores también querían obtener la entrada "en bruto", diseñaron otra función llamada "entrada en bruto". En Python 3 se dieron cuenta de lo estúpido que era y simplemente borraron la ejecución de la entrada original por defecto, produciendo solo una función simple. –

+1

Repl.it, ejecutando Py3.5.1 tiene raw_input() como palabra clave. – OldBunny2800

170

En Python , raw_input() devuelve una cadena, y input() intenta ejecutar la entrada como una expresión de Python.

Como obtener una cadena era casi siempre lo que quería, Python 3 lo hace con input(). Como dice Sven, si alguna vez quieres el viejo comportamiento, eval(input()) funciona.

+5

Debe agregar que Python 3 no tiene 'raw_input()'. –

+0

¿Cuál es el uso de la entrada en ejecución como expresión de python? –

+1

@AkshayVijayJain, probablemente fue para ingresar números. Pero es totalmente inseguro. – MarSoft

94

Python 2:

  • raw_input() toma exactamente lo que el usuario escribió y pasa de nuevo como una cadena.

  • input() primero toma el raw_input() y luego realiza un eval() en él también.

La diferencia principal es que input() espera una declaración pitón sintácticamente correcta, donde raw_input() no.

Python 3:

  • raw_input() fue renombrada como input()input() por lo que ahora devuelve la cadena exacta.
  • Antiguo input() eliminado.

Si desea utilizar el viejo input(), lo que significa que necesita para evaluar una entrada de usuario como una declaración de pitón, usted tiene que hacerlo de forma manual mediante el uso de eval(input()).

+11

... en python 2. – askewchan

+1

no aplicable para python 3 –

4

Me gustaría añadir un poco más de detalle a la explicación proporcionada por todos para el python 2 usuarios. raw_input(), que, por ahora, ya sabes que evalúa los datos que el usuario ingresa como una cadena. Esto significa que Python no intenta ni siquiera comprender los datos ingresados ​​nuevamente. Todo lo que considerará es que los datos ingresados ​​serán de cadena, ya sea o no una cadena real o int o cualquier otra cosa.

Mientras que input(), por otro lado, intenta comprender los datos ingresados ​​por el usuario. Entonces la entrada como helloworld incluso mostraría el error como 'helloworld is undefined'.

En conclusión, para pitón 2, para entrar en una cadena demasiado lo que necesita para entrar en él como 'helloworld' que es la estructura común que se utiliza en Python utilizar cadenas.

20

En Python 3, raw_input() no existe, que ya fue mencionado por Sven.

En Python 2, la función input() evalúa su entrada.

Ejemplo:

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 

En el ejemplo anterior, Python 2.x está intentando evaluar Harsha como una variable en lugar de una cadena. Para evitar esto, podemos utilizar comillas dobles alrededor de nuestra entrada como "Harsha":

>>> name = input("what is your name?") 
what is your name?"harsha" 
>>> print(name) 
harsha 

raw_input()

El raw_input() `función no evalúa, se acaba de leer lo que usted entrar.

Ejemplo:

name = raw_input("what is your name ?") 
what is your name ?harsha 
>>> name 
'harsha' 

Ejemplo:

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 

En ejemplo anterior, sólo estaba tratando de evaluar la entrada del usuario con la función de eval.

Cuestiones relacionadas