¿Cómo imprimir como printf en Python3?

125

En Python 2 usé:

print "a=%d,b=%d" % (f(x,n),g(x,n))

He intentado:

print("a=%d,b=%d") % (f(x,n),g(x,n))
Mike L
fuente
11
%siempre ha sido un operador de cadena, no relacionado con la printdeclaración. Podría, por ejemplo, crear una cadena con s="a=%d,b=%d"%(f(x,n),g(x,n)), luego imprimir esa cadena con print s.
chepner

Respuestas:

207

En Python2, printfue una palabra clave que introdujo una declaración:

print "Hi"

En Python3, printes una función que se puede invocar:

print ("Hi")

En ambas versiones, %es un operador que requiere una cadena en el lado izquierdo y un valor o una tupla de valores o un objeto de mapeo (como dict) en el lado derecho.

Entonces, tu línea debería verse así:

print("a=%d,b=%d" % (f(x,n),g(x,n)))

Además, la recomendación para Python3 y más reciente es usar el {}formato de %estilo en lugar del formato de estilo:

print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))

Python 3.6 introduce otro paradigma de formato de cadena: f-strings .

print(f'a={f(x,n):d}, b={g(x,n):d}')
Robᵩ
fuente
14
o: print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) donde este ejemplo muestra cómo puede usar los modificadores de estilo printf y aún usar palabras clave.
fbicknel
2
@rapt, tiene algunas grandes ventajas. No menos importante es que puede hacer referencia al mismo formato solo varias veces o fuera de orden: "{1}, {1}, {0} y {1}" .format ("huevos", "spam") = = "spam, spam, huevos y spam"
Dr. Xorile
53

La forma más recomendada de hacerlo es usar el formatmétodo. Lea más sobre esto aquí

a, b = 1, 2

print("a={0},b={1}".format(a, b))
thefourtheye
fuente
28

Función simple printf () del libro de cocina Python de O'Reilly .

import sys
def printf(format, *args):
    sys.stdout.write(format % args)

Salida de ejemplo:

i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14
stackoverflowuser2010
fuente
Je ... PRINTy FORMAT...? En el tiempo, más de 60 años hasta los días de FORTRAN :)
Skeeve
1
El enlace al libro de cocina de O'Reilly está muerto.
Ideograma
22

Python 3.6 introdujo cadenas f para la interpolación en línea. Lo que es aún mejor es que extendió la sintaxis para permitir también especificadores de formato con interpolación. Algo en lo que he estado trabajando mientras busqué en Google (¡y encontré esta vieja pregunta!):

print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')

PEP 498 tiene los detalles. Y ... clasificó mi motivo favorito con especificadores de formato en otros idiomas: permite especificadores que pueden ser expresiones. ¡Hurra! Ver: Especificadores de formato .

kva1966
fuente
2
Nota: Esta es también la forma más eficaz de inyectar variables en cadenas.
Rotareti
17

Ejemplo simple:

print("foo %d, bar %d" % (1,2))

Donald Derek
fuente
11

Una más simple

def printf(format, *values):
    print(format % values )

Luego:

printf("Hello, this is my name %s and my age %d", "Martin", 20)
Toure famoso
fuente
2

Debido a que %está fuera del print(...)paréntesis, está intentando insertar sus variables en el resultado de su printllamada. print(...)regresa None, por lo que esto no funcionará, y también existe la pequeña cuestión de que ya haya impreso su plantilla en este tiempo y el viaje en el tiempo está prohibido por las leyes del universo que habitamos.

Todo lo que desea imprimir, incluido el %y su operando, debe estar dentro de su print(...)llamada, para que la cadena se pueda construir antes de que se imprima.

print( "a=%d,b=%d" % (f(x,n), g(x,n)) )

He agregado algunos espacios adicionales para hacerlo más claro (aunque no son necesarios y generalmente no se consideran buen estilo).

un poco
fuente
2

Otras palabras printf ausentes en python ... ¡Estoy sorprendido! El mejor código es

def printf(format, *args):
    sys.stdout.write(format % args)

Debido a este formulario, permite no imprimir \ n. Todos los demás no. Es por eso que la impresión es un mal operador. Y también necesitas escribir argumentos en forma especial. No hay desventajas en la función anterior. Es una forma habitual estándar de la función printf.

Anatoliy
fuente
1
Puede evitar trivialmente \ n en la impresión. Simplemente agregue "," después del valor a imprimir.
Hejazzman
1
print("Name={}, balance={}".format(var-name, var-balance))
Usuario707
fuente