Tengo un script que crea salida con sys.stdout.write()
y sys.stderr.write()
. Recientemente publiqué un par de preguntas sobre otros aspectos del guión y me di cuenta de que las personas que publican respuestas parecen preferir print('some text', file=sys.stdout)
. Mi principal preocupación con la salida es simplemente que puede ser canalizada 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 que cada uno debe ser utilizado y el racional para esas convenciones?print() vs sys.stdout.write(): ¿y por qué?
Respuesta
"Por favor alguien puede explicar (o me dirigieron a una explicación existente) las diferencias entre la impresión() y sys.stdout.write, los casos en los que cada uno debe ser utilizado y los racionales de esos convenios? "
Bueno, supongo que el silencio que escucha con respecto a la función print() de Python3, se debe a que prácticamente solo existe una diferencia: Uso. permítanme citar PEP-3105: [1]
La firma de print()
es:
definición de impresión (* args, sep ='', final = '\ n', file = None)
una llamada como:
de impresión (a, b, c, file = sys.stderr)
será equivalente al de hoy:
de impresión >> sys.stderr, a, b, c
mientras que la SEP y final argumentos opcionales especifican lo que se imprime entre y después de los argumentos, respectivamente .
Se eliminará la función de espacio suave (un atributo semisecreto en los archivos que se utilizan actualmente para indicar si se debe insertar un espacio antes del primer elemento). Por lo tanto, no habrá una traducción directa de hoy:
de impresión "a", la impresión
que no se imprimirá un espacio entre la "a" y la nueva línea.
Así, citando la discusión de Guido van Rossum sobre el problema en 2005 [1]: Existe 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; o tiene que cambiar a usar sys.stdout.write()
, o tiene que recoger todos los elementos en una cadena.Esto no es una simple transformación, tenga en cuenta lo que se necesita para deshacerse de los espacios antes de las comas en este ejemplo sencillo:
print "x =", x, ", y =", y, ", z =", z
si era una función incorporada, después de haber incorporado un La función complementaria que hizo algo similar sin insertar espacios y agregar una nueva línea sería lo lógico (o agregar parámetros de palabras clave para controlar ese comportamiento, pero prefiero una segunda función); pero con sólo de impresión en su estado actual, habría que cambiar a algo así 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 diga que los espacios no son gran cosa - que no están en esta ejemplo, pero lo son 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 pythonically más correcta de escribir código de nivel superior:
séptimo Zen de Python: "La legibilidad cuenta"
- 1. ¿La diferencia entre sys.stdout.write e print?
- 2. python Unicode manejando las diferencias entre print y sys.stdout.write
- 3. print vs stderr
- 4. ¿Por qué sys.stdout.write ('\ b') no retrocede contra las nuevas líneas?
- 5. ¿Qué es el equivalente "sys.stdout.write()" en Ruby?
- 6. Javascript print bloqueado por chrome
- 7. variables Insertar utilizando sys.stdout.write en Python
- 8. Diccionario vs Objeto: ¿qué es más eficiente y por qué?
- 9. ¿Qué función funciona en realidad python print()?
- 10. Problemas con sys.stdout.write() con time.sleep() en una función
- 11. MySQL vs. JSON - ¿Por qué?
- 12. MVP Vs MVVM: por qué
- 13. Abrir archivos XML enormes y Pretty-Print
- 14. pitthons 'print' declaración no llama al método .write()?
- 15. ¿Por qué crear splunk dashboards vs views?
- 16. sobrecarga print python
- 17. instrucción PRINT en T-SQL
- 18. css print styling
- 19. Python 2.7 print() error
- 20. JS Fiddle print/alert
- 21. ¿Por qué el comando print en gdb devuelve \ 035 para C++ std :: strings?
- 22. ¿Por qué DataMapper usa mixins vs inheritance?
- 23. ¿Por qué mi identificador de archivo bendecido de Perl no devuelve verdadero con `can ('print')` '?
- 24. mPDF auto print issue
- 25. js window.open then print()
- 26. Pretty Print SQL en Ruby
- 27. ¿Por qué difiere la cantidad de subprocesos informados por WinDbg, Task Manager y VS Debugger?
- 28. mongoose vs mongodb (nodejs modules/extensions), ¿qué mejor? ¿y por qué?
- 29. Python vs. Java - ¿Qué elegirías para hacer una programación concurrente y por qué?
- 30. En Python, ¿por qué algo no se imprimirá sin una nueva línea?
duplicado posible de [Python - La diferencia entre sys.stdout.write e imprimir] (https: //stackoverflow.com/questions/3263672/python-the-difference-between-sys-stdout-write-and-print) –