print and python python-3.x

and - python print console



print() vs sys.stdout.write(): cuál y por qué? (1)

Tengo un script que crea una salida con sys.stdout.write() y sys.stderr.write() . Recientemente, publiqué un par de preguntas sobre otros aspectos de la secuencia de comandos y me he dado cuenta de que las personas que publican respuestas parecen preferir la print(''some text'', file=sys.stdout) . Mi principal preocupación con la salida es simplemente que puede ser canalizado por el shell, ya sea en un archivo o como entrada a otro programa. ¿Puede alguien explicar (o dirigirme a una explicación existente) las diferencias entre print() y sys.stdout.write , los casos en los que se debe usar cada uno y el razonamiento racional de esas convenciones?


" ¿Alguien puede explicar (o dirigirme a una explicación existente) las diferencias entre print () y sys.stdout.write, los casos en que cada uno debería usarse y el racional de esas convenciones? "

Bueno, supongo que el silencio que escuchas con respecto a la función print () de Python3 se debe a que prácticamente solo hay una diferencia: el uso. Permítanme citar PEP-3105: [ 1 ]

La firma para print() es:

def print (* args, sep = '''', end = ''/ n'', file = None)

Una llamada como:

imprimir (a, b, c, archivo = sys.stderr)

será equivalente a la de hoy:

imprimir >> sys.stderr, a, b, c

mientras que los argumentos opcionales de sep y final especifican qué se imprime entre y después de los argumentos, respectivamente.

Se eliminará la función de espacio suave (un atributo semi-secreto en los archivos que se usan actualmente para indicar a la impresora si se debe insertar un espacio antes del primer elemento). Por lo tanto, no habrá una traducción directa para hoy:

imprimir "a", imprimir

que no imprimirá un espacio entre la "a" y la nueva línea.

Por lo tanto, citando la discusión de Guido van Rossum sobre el problema en 2005 [ 1 ]: hay una clara no linealidad en la facilidad de uso de la impresión una vez que decide que no desea tener espacios entre los elementos; tienes que cambiar a usar sys.stdout.write() o tienes que recopilar todos los elementos en una cadena. Esta no es una transformación simple, considere lo que se necesita para deshacerse de los espacios antes de las comas en este simple ejemplo:

print "x =", x, ", y =", y, ", z =", z

Si fuera una función incorporada, sería lógico tener una función complementaria incorporada que hiciera algo similar sin insertar espacios y agregar una nueva línea (o agregar parámetros de palabras clave para controlar ese comportamiento; pero prefiero una segunda). función); pero con solo imprimir en su estado actual, tendrías que cambiar a algo como

print "x = " + str(x) + ", y = " + str(x) + ", z = " + str(z)

o

print "x = %s, y = %s, z = %s" % (x, y, z)

ninguno de los cuales es muy atractivo. (Y no me digas que los espacios no son un gran problema, no están en este ejemplo, pero sí en otras situaciones).

Buena pregunta para un domingo por la mañana por el carril de la memoria; ¿Por qué esta aparente redundancia? Debido a que es más correcto a la hora de escribir un código de nivel superior:

7mo Zen de python: "La legibilidad cuenta"