2012-09-12 15 views
83

En Python parece que hay dos maneras diferentes de generar la salida con formato:Manera de impresión de Python: ¿con 'formato' o forma de porcentaje?

user = "Alex" 
number = 38746 
print("%s asked %d questions on stackoverflow.com" % (user, number)) 
print("{0} asked {1} questions on stackoverflow.com".format(user, number)) 

¿Hay una manera de ser preferido sobre el otro? ¿Son equivalentes, cuál es la diferencia? ¿Qué forma debería usarse, especialmente para Python3?

Respuesta

85

Utilice el método format, especialmente si le preocupa Python 3 y el futuro. De the documentation:

Las operaciones de formato describen aquí [% sustituciones] son ​​obsoletos y pueden desaparecer en futuras versiones de Python. Use el nuevo Formato de cadena en el nuevo código.

+14

La nueva documentación dice esto sobre el operador de porcentajes: "Las operaciones de formateo descritas aquí muestran una variedad de peculiaridades que conducen a un número de errores comunes ... "pero está ** no ** obsoleto. http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting – guettli

+2

No está oficialmente obsoleto, pero se recomienda no usarlo. – BrenBarn

+1

Relacionados: http://bugs.python.org/issue14123 – guettli

5

The docs dicen que se prefiere el método format para el nuevo código. Sin embargo, actualmente no hay planes para eliminar el% de formateo.

18

.format se introdujo en Python2.6

Si necesita compatibilidad con los principios de Python, se debe utilizar %

Para python3 y más reciente se debe utilizar con seguridad .format

.format es más potente que %. Portar % a .format es fácil, pero a la inversa puede ser no trivial

+0

¿cómo es más poderoso? – yossi

+4

@yossi Aquí hay un ejemplo http://stackoverflow.com/a/3228928/174728. También le permite hacer búsquedas de teclas/índice 'import sys ; "{[version]}". format (vars (sys)) ' –

+2

cómo sobre: ​​ ' import sys; "% (version) s"% (vars (sys)) ' – Pax0r

6

Puede utilizar ambos. Nadie dijo que la expresión de formato% está en desuso. Sin embargo, como se dijo antes, la llamada al método de formato es un poco más poderosa. También tenga en cuenta que las expresiones% son un poco más concisas y fáciles de codificar. Pruébelas y vea lo que más le convenga

+0

Es probable que valga la pena señalar que el módulo 'logging' utiliza la sintaxis'% '-like, por lo que puede ser preferible por razones de coherencia. – sshilovsky

Cuestiones relacionadas