Risposte:
In Python2, print
era una parola chiave che introduceva un'istruzione:
print "Hi"
In Python3, print
è una funzione che può essere invocata:
print ("Hi")
In entrambe le versioni, %
è un operatore che richiede una stringa sul lato sinistro e un valore o una tupla di valori o un oggetto di mappatura (come dict
) sul lato destro.
Quindi, la tua linea dovrebbe apparire così:
print("a=%d,b=%d" % (f(x,n),g(x,n)))
Inoltre, la raccomandazione per Python3 e versioni successive è quella di utilizzare la {}
formattazione in stile anziché la %
formattazione in stile:
print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))
Python 3.6 introduce ancora un altro paradigma di formattazione delle stringhe : f-stringhe .
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)))
dove questo esempio mostra come è possibile utilizzare i modificatori di stile printf e continuare a utilizzare le parole chiave.
Il modo più consigliato di fare è usare il format
metodo. Leggi di più qui
a, b = 1, 2
print("a={0},b={1}".format(a, b))
Semplice funzione printf () dal ricettario Python di O'Reilly .
import sys
def printf(format, *args):
sys.stdout.write(format % args)
Esempio di output:
i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14
PRINT
e FORMAT
...? Indietro nel tempo 60+ anni ai giorni di FORTRAN :)
Python 3.6 ha introdotto le stringhe f per l'interpolazione in linea. La cosa ancora più bella è che ha esteso la sintassi per consentire anche agli identificatori di formato con interpolazione. Qualcosa su cui ho lavorato mentre cercavo su Google (e mi sono imbattuto in questa vecchia domanda!):
print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')
PEP 498 ha i dettagli. E ... ha ordinato la mia pipì per animali domestici con identificatori di formato in altre lingue - consente agli identificatori che essi stessi possono essere espressioni! Sìì! Vedi: Identificatori di formato .
Esempio semplice:
print("foo %d, bar %d" % (1,2))
Uno più semplice.
def printf(format, *values):
print(format % values )
Poi:
printf("Hello, this is my name %s and my age %d", "Martin", 20)
Poiché la tua %
è al di fuori delle print(...)
parentesi, stai cercando di inserire le tue variabili nel risultato della tua print
chiamata. print(...)
ritorna None
, quindi questo non funzionerà, e c'è anche la piccola questione di te che hai già stampato il tuo modello in questo momento e che il viaggio nel tempo è proibito dalle leggi dell'universo in cui abitiamo.
L'intera cosa che si desidera stampare, incluso l' %
operando e il relativo, deve essere all'interno della print(...)
chiamata, in modo che la stringa possa essere costruita prima che venga stampata.
print( "a=%d,b=%d" % (f(x,n), g(x,n)) )
Ho aggiunto alcuni spazi extra per renderlo più chiaro (anche se non sono necessari e generalmente non sono considerati buoni stili).
Altre parole stampate assenti in pitone ... Sono sorpreso! Il miglior codice è
def printf(format, *args):
sys.stdout.write(format % args)
A causa di questo modulo consente di non stampare \ n. Tutti gli altri no. Ecco perché la stampa è un cattivo operatore. E anche tu hai bisogno di scrivere arg in forma speciale. Non ci sono svantaggi nella funzione sopra. È una normale forma standard di funzione printf.
%
è sempre stato un operatore di stringa, non correlatoprint
all'istruzione. Ad esempio, è possibile creare una stringa cons="a=%d,b=%d"%(f(x,n),g(x,n))
, quindi stampare quella stringa conprint s
.