ventajas sobre programar programación programacion otros lenguajes lenguaje importancia futuro frente desventajas cual arte python function printing python-3.x python-2.x

programar - ¿Cuál es la ventaja de la nueva función de impresión en Python 3.x sobre la declaración de impresión de Python 2?



ventajas de python sobre php (5)

He escuchado varias veces que imprimir es una función (3.x) es mejor que una afirmación (2.x). ¿Pero por qué?

Me gustaba que fuera una declaración, principalmente porque me permitía escribir dos caracteres menos (es decir, los paréntesis).

Me interesaría ver algunas situaciones en las que la frase impresa simplemente no funciona, y una función es superior.


Lo siguiente es de http://www.python.org/dev/peps/pep-3105/

La declaración de impresión ha aparecido durante mucho tiempo en listas de características de lenguaje dudosas que deben eliminarse en Python 3000, como la presentación de "arrepentimientos de Python" [1] de Guido. Como tal, el objetivo de este PEP no es nuevo, aunque podría ser muy discutido entre los desarrolladores de Python.

Los siguientes argumentos para una función print () se extraen de un mensaje python-3000 del mismo Guido [2]:

  • print es la única funcionalidad de nivel de aplicación que tiene una declaración dedicada a ella. En el mundo de Python, la sintaxis generalmente se utiliza como último recurso, cuando algo no se puede hacer sin la ayuda del compilador. La impresión no califica para tal excepción.
  • En algún momento del desarrollo de aplicaciones, con bastante frecuencia se siente la necesidad de reemplazar la salida de impresión por algo más sofisticado, como el registro de llamadas o llamadas a otra biblioteca de E / S. Con una función print (), se trata de un reemplazo directo de cadenas, hoy en día es un desastre agregar todos esos paréntesis y, posiblemente, convertir >> la sintaxis de estilo de flujo.
  • Tener una sintaxis especial para imprimir crea una barrera mucho más grande para la evolución, por ejemplo, una nueva función hipotética printf () no es demasiado exagerada cuando coexiste con una función print ().
  • No hay una manera fácil de convertir instrucciones de impresión en otra llamada si se necesita un separador diferente, no espacios, o ninguno. Además, no hay una manera fácil de imprimir convenientemente objetos con algún otro separador aparte de un espacio.
  • Si print () es una función, sería mucho más fácil reemplazarla dentro de un módulo (simplemente def print(*args):...) o incluso a través de un programa (por ejemplo, poniendo una función diferente en __builtin__.print ). Tal como está, uno puede hacer esto escribiendo una clase con un método write () y asignándolo a sys.stdout; eso no está mal, pero definitivamente es un salto conceptual mucho más grande, y funciona a un nivel diferente al de impresión.

Pensé en esta pregunta y no tenía idea de las ventajas de la versión Python 3. Pero cuando necesitaba imprimir las columnas de pandas.DataFrame (sin Index([...]) ), descubrí que

print *df.columns

arroja una excepción, mientras

print(*df.columns)

¡funciona bien! Y si desea tener las mismas opciones de impresión (configurables) en varias impresiones de llamadas, puede guardarlas en el diccionario y pasarlas como **print_options

Por lo tanto, al menos *args , **kw_args trucos de **kw_args son una buena razón para que print sea ​​una función.


Puede reemplazar la print incorporada por una personalizada:

import os import sys def print(s): sys.stderr.write(''Will now print '' + str(s) + ''.'' + os.linesep) sys.stdout.write(str(s) + os.linesep) print([''A'', ''list'']) # Output: # stderr: Will now print [''A'', ''list'']. # stdout: [''A'', ''list'']

Puede usar print dentro de una lambda o una llamada de función, etc.

example_timeout_function(call=lambda: print(''Hello world''), timeout=5) do_things(print_function=print)


Todo lo que dijo Jochen + Sven, más:

Puede usar print() en lugares donde no puede usar print , como por ejemplo:

[print(x) for x in range(10)]


Una ventaja de que la print es una función es la consistencia. No hay razón para que sea una declaración. Compara estas dos líneas

2.x: print >> my_file, x 3.x: print(x, file=my_file)

La nueva versión se parece mucho más a Python, ¿no?

Otra ventaja de la versión de la función es la flexibilidad. Por ejemplo, si desea capturar todas print llamadas de print para propósitos de depuración, ahora puede simplemente redefinir la print :

def print(*args, **kwargs): # whatever __builtins__.print(*args, **kwargs)