Respuestas:
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}')
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.
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))
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
PRINTy FORMAT...? En el tiempo, más de 60 años hasta los días de FORTRAN :)
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 .
Ejemplo simple:
print("foo %d, bar %d" % (1,2))
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)
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).
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.
print("Name={}, balance={}".format(var-name, var-balance))
%siempre ha sido un operador de cadena, no relacionado con laprintdeclaración. Podría, por ejemplo, crear una cadena cons="a=%d,b=%d"%(f(x,n),g(x,n)), luego imprimir esa cadena conprint s.