¿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?
Respuesta
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.
Todavía no he jugado con Python 3. ¿La palabra clave print aún funciona? – user538442
No. Ahora es una función. En el caso simple, "print" foo "' se convierte en 'print (" foo ")' –
Corregido como en "ahora una función" :) –
Ahora es una función en Python 3.
Parece extraño que tomó más de 10 años corregirlo – user538442
@user: No es necesariamente una cuestión de tiempo, sino una cuestión de compatibilidad, tanto hacia delante como hacia atrás. –
@ user538442: la compatibilidad con versiones anteriores es una perra :( – delnan
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.
Uhhh, ahora esto está empezando a tener sentido. – user538442
Así que la funcionalidad adicional se ha perdido ahora, como el final, y >> – user538442
Todavía está allí, pero ahora usa el 'end =' y 'file =' parámetros de palabra clave en lugar de la sintaxis especial. – dan04
print
fue 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 print
es una función. Sí, en Python 2 también, puede hacer
from __future__ import print_function
y todo listo. Funciona desde Python 2.6.
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.
Con este argumento, 'input' también debería ser una declaración. – steffen
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.
- 1. ¿Por qué no se puede pasar la función de impresión a dir() en python?
- 2. ¿Por qué .val() no es una función?
- 3. ¿Por qué jQuery.parseJSON no es una función?
- 4. ¿Por qué no es la función 'len' heredada por los diccionarios y listas en Python
- 5. función de impresión python en tiempo real
- 6. ¿Por qué foo = function() ejecuta la función en Python?
- 7. ¿Por qué la impresión de una variable cambia su valor?
- 8. ¿Por qué numCapabilities es una función pura?
- 9. Encontrar una instrucción de impresión en Python
- 10. ¿Por qué javascript getTime() no es una función?
- 11. ¿Por qué is_lock_free es una función miembro?
- 12. ¿Por qué printf() es una función impura?
- 13. ¿Por qué es determinante si una función es puramente difícil?
- 14. ¿Por qué el constructor no es la función constructora?
- 15. En Python, ¿por qué no funciona una importación en un ejecutivo en una función?
- 16. ¿No es una función?
- 17. ¿Por qué es {} <función() {}?
- 18. ¿por qué invocamos de impresión después de importar print_function (en Python 2.6)
- 19. ¿Por qué el "anexo" de Python no es "push"?
- 20. ¿Por qué '\ x' no es válido en Python?
- 21. ¿es posible no devolver nada desde una función en python?
- 22. ¿Por qué la función JavaScript `arguments` no es una instancia de Array en node.js?
- 23. PythonWin - función de impresión no funciona
- 24. ¿Por qué es necesaria una línea en esta función python? (recursividad memorable)
- 25. ¿Por qué Python 2.6 agregó una función global next()?
- 26. ¿Por qué tuple no es mutable en Python?
- 27. ¿Por qué la impresión en stdout es tan lenta? ¿Se puede acelerar?
- 28. ¿Por qué es necesaria la función apply() en el constructor
- 29. ¿Por qué no hay una función String.IsNumeric en C#
- 30. ¿Cómo determinar si la variable es una función en Python?
ver http://www.python.org/dev/peps/pep-3105/ – jfs
interesante; nunca lo consideró un problema, sino una buena pregunta. –
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