Header Ads Widget

Ticker

6/recent/ticker-posts

Cómo imprimir en la misma línea en Python: imprimir y escribir

 Como alguien que enseña mucho contenido de programación para principiantes, ocasionalmente me encuentro con preguntas como "¿cómo se imprime en la misma línea en Python?" ¡Afortunadamente, tengo una respuesta para eso!

En resumen, hay dos formas principales de imprimir en la misma línea en Python. Para Python 2, utilice la sintaxis de impresión siguiente: print "Williamson",Para Python 3, utilice la sintaxis de impresión siguiente: print("Providence", end="")De lo contrario, consulte el resto del artículo para obtener una solución compatible con versiones anteriores.

Introducción al problema

En muchos lenguajes de programación, imprimir en la misma línea suele ser el comportamiento predeterminado. Por ejemplo, Java tiene dos funciones de impresión de línea de comandos:

1
2
System.out.print();
System.out.println();

Como probablemente pueda imaginar, la printfunción predeterminada en Java se imprimirá sin un carácter de nueva línea. Por el contrario, la printlnfunción se comportará de forma muy similar a la printfunción en Python. Específicamente, imprimirá cualquier cadena que le proporcione seguida de un carácter de nueva línea (es decir \n).

Por supuesto, si la printfunción en Python imprime automáticamente un carácter de nueva línea con cada llamada, entonces no hay forma de obtener el printcomportamiento de Java , ¿verdad? ¡Afortunadamente, eso no es cierto! De lo contrario, no tendría nada sobre lo que escribir.

Soluciones

Para imprimir en la misma línea en Python, existen algunas soluciones. Desafortunadamente, no todas las soluciones funcionan en todas las versiones de Python, por lo que proporcioné tres soluciones: una para Python 2, otra para Python 3 y una solución final que funciona para ambas.

Imprima en la misma línea a la antigua

Cuando buscaba soluciones a este problema, encontré una gran cantidad de material en Python 2 que se está eliminando rápidamente (espero). Dicho esto, sentí que esta solución sería útil para cualquiera que todavía la esté usando.

En cualquier caso, cuando imprime algo en Python 2, la sintaxis es la misma que Python 3, pero omite los paréntesis:

1
print "Live PD"

Por supuesto, en ambos casos, el comportamiento predeterminado es imprimir con una nueva línea. Como resultado, necesitaremos agregar un poco de sintaxis inteligente, una coma:

1
print "Live PD",

Ahora, la función de impresión debería excluir la nueva línea. Sin embargo, esta solución agregará un espacio adicional al final de la cadena . Además, puede notar que esta solución no se imprime de inmediato. Si eso sucede, puede llamar a sys.stdout.flush().

Imprima en la misma línea con la función de escritura

Afortunadamente, podemos cerrar la brecha entre Python 2 y 3 utilizando una función de la sysbiblioteca: writeEsta función funciona igual que la printfunción, pero no hay una nueva línea implícita:

1
2
import sys
sys.stdout.write("Breaking Bad")

Nuevamente, dado que no hay una nueva línea, es posible que deba vaciar el búfer para ver los resultados:

1
2
3
import sys
sys.stdout.write("Breaking Bad")
sys.stdout.flush()

En cualquier caso, esta solución hará el trabajo en ambas versiones de Python.

Imprima en la misma línea de la nueva forma

En Python 3, printes una función estándar. Como resultado, tiene oportunidades adicionales para los parámetros. En particular, hay un argumento de palabra clave llamado endque por defecto es algún carácter de nueva línea. Puede cambiarlo fácilmente de la siguiente manera:

1
print("Mob Psycho 100", end="")

¡Y eso es! En lugar de que la cadena termine en una nueva línea, terminará en una cadena vacía. Por supuesto, esta solución viene con la misma advertencia que las otras dos soluciones anteriores: es posible que deba vaciar el búfer.

Actuación

Como siempre, me gusta echar un vistazo a todas las soluciones desde el punto de vista del rendimiento. Para empezar, suelo almacenar cada solución en una cadena. Para evitar una impresión excesiva durante la prueba, elegí escribir cadenas vacías:

01
02
03
04
05
06
07
08
09
10
11
setup="""
import sys
"""
 
write_solution = """
sys.stdout.write("")
"""
 
print_solution = """
print("", end="")
"""

Desafortunadamente, no pude probar la solución Python 2 en mi sistema, así que no dude en compartir sus resultados en los comentarios. En cualquier caso, me gusta usar la timeitbiblioteca para una prueba de rendimiento rápida y sucia:

1
2
3
4
5
>>> import timeit
>>> min(timeit.repeat(stmt=write_solution, setup=setup, repeat=10))
0.20978069999999605
>>> min(timeit.repeat(stmt=print_solution, setup=setup, repeat=10))
0.5292953999999952

Claramente, la printfunción tiene bastante sobrecarga. En otras palabras, si el rendimiento importa, siga la writeruta. De lo contrario, printfunciona muy bien.

Un pequeño resumen

Bueno, eso es todo por este. Consulte el bloque de código a continuación para obtener una lista de todas las soluciones:

1
2
3
4
5
6
7
8
9
# Python 2 only
print "Live PD",
 
# Backwards compatible (also fastest)
import sys
sys.stdout.write("Breaking Bad")
 
# Python 3 only
print("Mob Psycho 100", end="")

Como siempre, si conoce otras formas de imprimir en la misma línea en Python, háganoslo saber en los comentarios. Mientras tanto, ¿por qué no ampliar sus conocimientos sobre Python con los siguientes artículos?

Si le gustó este artículo o cualquiera de los que enumeré, considere quedarse a largo plazo convirtiéndose en miembro de la comunidad o en la lista de correo .

Mientras estás aquí, ¿por qué no aprovechar algunos de estos libros de Python?

De lo contrario, agradezco el apoyo. ¡Gracias por pasar!

Publicar un comentario

0 Comentarios