2010-12-10 11 views
10

¿Por qué print es una palabra clave en python y no una función?¿Por qué la impresión no es una función en python?

+2

ver http://www.python.org/dev/peps/pep-3105/ – jfs

+0

interesante; nunca lo consideró un problema, sino una buena pregunta. –

+0

readln y writeln fueron incorporados en Turbo Pascal también. Nunca entendí por qué, y me gustó C más para hacer que funcionen en su lugar. – sashoalm

Respuesta

12

Porque Guido ha decidido que cometió un error. :)

Se corrigió desde entonces: pruebe Python 3, que dedica un section of its release notes a describir el cambio a una función.

Para el fondo completo, vea PEP 3105 y los diversos enlaces provistos en su sección de Referencias.

+0

Todavía no he jugado con Python 3. ¿La palabra clave print aún funciona? – user538442

+2

No. Ahora es una función. En el caso simple, "print" foo "' se convierte en 'print (" foo ")' –

+0

Corregido como en "ahora una función" :) –

2

Ahora es una función en Python 3.

+0

Parece extraño que tomó más de 10 años corregirlo – user538442

+1

@user: No es necesariamente una cuestión de tiempo, sino una cuestión de compatibilidad, tanto hacia delante como hacia atrás. –

+4

@ user538442: la compatibilidad con versiones anteriores es una perra :( – delnan

1

La declaración print en Python 2.x tiene una sintaxis especial que no estaría disponible para una función ordinaria. Por ejemplo, puede usar un , posterior para suprimir la salida de una línea nueva final o puede usar >> para redirigir la salida a un archivo. Pero todo esto no fue lo suficientemente convincente incluso para el propio Guido van Rossum como para mantenerlo como una declaración: convirtió print en una función en Python 3.x.

+0

Uhhh, ahora esto está empezando a tener sentido. – user538442

+0

Así que la funcionalidad adicional se ha perdido ahora, como el final, y >> – user538442

+5

Todavía está allí, pero ahora usa el 'end =' y 'file =' parámetros de palabra clave en lugar de la sintaxis especial. – dan04

8

printfue una declaración en Python porque era una declaración en ABC, la principal inspiración para Python (aunque se le llamó WRITE allí). Eso a su vez probablemente tenía una declaración en lugar de una función, ya que era un lenguaje de enseñanza y, como tal, estaba inspirado en lo básico. Python, por otro lado, resultó ser más que un lenguaje de enseñanza (aunque también es bueno para eso).

Sin embargo, hoy en día printes una función. Sí, en Python 2 también, puede hacer

from __future__ import print_function 

y todo listo. Funciona desde Python 2.6.

1

Una respuesta que se basa en lo que aprecio de la declaración print, pero no necesariamente de la historia oficial de Python ...

Python es, en cierta medida, un lenguaje de scripting . Ahora, hay muchas definiciones de "lenguaje de scripting", pero el que usaré aquí es: un lenguaje diseñado para el uso eficiente de programas cortos o interactivos. Dichos lenguajes tienden a permitir programas de una sola línea sin una repetición excesiva; hacer la entrada del teclado más fácil (por ejemplo, evitando la puntuación excesiva); y proporcionar sintaxis incorporada para tareas comunes (conveniencia a expensas posibles de la pureza). En el caso de Python, imprimir un valor es algo muy común de hacer, especialmente en modo interactivo. Requerir que print sea una función parece innecesariamente inconveniente aquí. Hay un riesgo significativamente menor de error con la sintaxis especial que hace lo correcto el 99% del tiempo.

+0

Con este argumento, 'input' también debería ser una declaración. – steffen

0

voy a lanzar en mis pensamientos sobre esto:

En Python 2.x print no es una declaración de error, o porque la impresión a stdout es una cosa tan básica que hacer. Todo lo demás es tan pensado o tiene razones al menos comprensibles de que un error de ese orden parecería extraño. Si la comunicación con stdout hubiera sido considerada tan básica, la comunicación con stdin debería ser igual de importante, aunque input() es una función.

Si nos fijamos en list of reserved keywords y list of statements que no son expresiones, print claramente se destaca, que es otra pista que debe haber razones muy específicas.

creo print tenía que ser una declaración y no una expresión, para evitar un fallo de seguridad en input(). Recuerde que input() en Python2 evalúa lo que el usuario escriba en stdin. Si el usuario ingresó print a y a tiene una lista de todas las contraseñas, eso sería catastrófico.

Aparentemente, la capacidad de input() para evaluar expresiones se consideró más importante que print siendo una función incorporada normal.

Cuestiones relacionadas