multiple examples example python python-2.7 python-3.x string-formatting

python - examples - ¿Por qué imprimir("texto"+str(var1)+"más texto"+str(var2)) se describe como "rechazado"?



python format repeat string (2)

¿Por qué el código a continuación se denomina "método desaprobado antiguo" de impresión en el comentario de "Serpientes y café" en la publicación de Blender de múltiples argumentos en Python ? ¿Tiene que ver con el código de backend / implementación de Python 2 o Python 3?

print("Total score for " + str(name) + " is " + str(score))


Se considera antiguo porque puede utilizar ''mejores'' formas de formatearlo con la introducción de python 3 (y versiones posteriores de python 2).

print("Total score for "+str(name)"+ is "+str(score))

Podría escribirse como: print("Total score for %s is %s" % (name, score))

Aunque hay una multitud de formas diferentes de formatear la impresión en versiones posteriores de python 2 y superiores.

Lo que está arriba es técnicamente viejo también, esta es otra forma de hacerlo en versiones posteriores de python 2 y superiores.

print(''Total score for {} is {}''.format(name, score)


Se desaprueba agregar muchas cadenas porque:

  • no es realmente legible, en comparación con las alternativas.
  • no es tan eficiente como las alternativas.
  • si tiene otros tipos, debe llamar manualmente a str .

Y, sí, es realmente viejo. :-)

En teoría, la adición de cadenas crea una nueva cadena. Entonces, suponga que agrega n cadenas, entonces necesita crear cadenas n-1 pero todas estas, excepto una, se descartan porque solo está interesado en el resultado final. Las cadenas se implementan como matrices, por lo que tiene muchas asignaciones (re) potencialmente costosas sin ningún beneficio.

Si tiene una cadena con marcadores de posición, no solo es más legible (no tiene estos + y str entre ellos), sino que python también puede calcular cuánto tiempo dura la cadena final y asignar solo una matriz para la cadena final e insertar todo.

En la práctica, eso no es realmente lo que sucede porque Python comprueba si una cadena es intermedia y realiza alguna optimización. Por lo tanto, no es tan malo como crear n-2 matrices innecesarias.

Para cadenas pequeñas y / o uso interactivo, ni siquiera notará la diferencia. Pero entonces las otras formas tienen la ventaja de ser más legibles.

Las alternativas podrían ser (las dos primeras se copian de la respuesta de @MKemps):

  • "Total score for {} is {}".format(name, score)
  • "Total score for %s is %s" % (name, score) (¡también viejo!)
  • "Total score for {name} is {score}".format(name=name, score=score)
  • f"Total score for {name} is {score}" (muy nuevo - introducido en Python 3.6)

Especialmente los dos últimos ejemplos muestran que incluso se puede leer la cadena de la plantilla sin tener que insertar nada.