Corso
Se stai iniziando con Python e vuoi saperne di più, segui il corso di DataCamp Introduction to Data Science in Python.

Molti di voi, leggendo questo tutorial, potrebbero pensare che non ci sia nulla di inesplorato in una semplice funzione Python di stampa, dato che probabilmente avete iniziato a imparare Python con l’intramontabile esempio di stampa di Hello, World!. È anche vero che in Python o, in generale, in qualsiasi linguaggio di programmazione, la funzione di stampa è il passo più basilare, il primo “passettino” quando si impara un linguaggio. Tuttavia, mentre impari un linguaggio di programmazione, a volte tendi a concentrarti su argomenti più avanzati e spesso dimentichi le sottigliezze o le capacità di una funzione semplice che usi quasi sempre.
Il focus del tutorial di oggi sarà interamente sulla funzione print di Python; imparerai a conoscere una funzione spesso sottovalutata.
Iniziamo questo tutorial stampando l’esempio Hello, World!.
print("Hello, World!")
Hello, World!
A differenza di Python2, che non richiedeva le parentesi, in Python3 le parentesi sono obbligatorie, altrimenti verrà generato un errore di sintassi come mostrato di seguito.
print "Hello, World!"
File "<ipython-input-6-a1fcabcd869c>", line 1
print "Hello, World!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello, World!")?
Dal risultato sopra puoi concludere che in Python3 print() non è un’istruzione, ma una funzione.
Detto questo, verifichiamo il tipo/classe della funzione print().
type(print)
builtin_function_or_method
Restituisce builtin_function_or_method, il che significa che è una funzione Python predefinita o incorporata.
Ora supponiamo che tu voglia aggiungere una nuova riga o uno spazio verticale tra i due output qui sotto: per farlo puoi semplicemente chiamare la funzione print() senza passare alcun argomento.
print("Hello, World!");print("Hello, World!")
Hello, World!
Hello, World!
print("Hello, World!")
print()
print("Hello, World!")
Hello, World!
Hello, World!
Vediamo la sintassi della funzione print(). print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Come ormai sai, la funzione print stampa i valori su uno stream, oppure su sys.stdout per impostazione predefinita. sys.stdout, ovvero lo standard output del sistema, significa che la funzione print stamperà l’output a schermo, e può anche essere reindirizzata su stdin o stderr.
Argomenti keyword opzionali:
-
sep: Può essere una stringa che desideri inserire tra i valori, predefinita a uno spazio.Inseriamo un elenco di parole dentro la funzione print e separiamole con una nuova riga. Ricorda che, per impostazione predefinita, il separatore aggiunge uno spazio vuoto tra ogni parola.
print('datacamp','tutorial','on','python','print','function')
datacamp tutorial on python print function
print('datacamp','tutorial','on','python','print','function',sep='\n') #`\n` metterà ogni parola su una nuova riga
datacamp
tutorial
on
python
print
function
Allo stesso modo, puoi separarli con una virgola, oppure aggiungere due \n che inseriscono una riga vuota tra ciascuno, o anche aggiungere un segno più (+).
print('datacamp','tutorial','on','python','print','function',sep=',')
datacamp,tutorial,on,python,print,function
print('datacamp','tutorial','on','python','print','function',sep='\n\n')
datacamp
tutorial
on
python
print
function
print('datacamp','tutorial','on','python','print','function',sep=',+')
datacamp,+tutorial,+on,+python,+print,+function
Prima di passare all’argomento successivo, cioè end, ricorda che puoi anche passare una variabile alla funzione print. Per capirlo, prendiamo un esempio definendo una lista di interi e passandola alla funzione print. Ti aspetteresti che stampi l’elenco di interi.
int_list = [1,2,3,4,5,6]
print(int_list)
[1, 2, 3, 4, 5, 6]
-
end: È una stringa aggiunta dopo l’ultimo valore, predefinita a una nuova riga. Consente al programmatore di definire un carattere di chiusura personalizzato per ogni chiamata a print, diverso dalla nuova riga predefinita\n.Supponiamo che tu abbia due stringhe e voglia unirle con uno spazio: tutto ciò che devi fare è, nella print della prima stringa
str1, aggiungere l’argomentoendcon uno spazio tra virgolette, e potrai aspettarti che le due stringhe vengano unite da uno spazio.
str1 = 'datacamp tutorial on'
str2 = 'python print function'
print(str1)
print(str2)
datacamp tutorial on
python print function
print(str1,end=' ')
print(str2)
datacamp tutorial on python print function
Facciamo un altro esempio in cui hai una funzione che deve stampare tutti i valori di una lista sulla stessa riga. Puoi ottenerlo con l’argomento end, come mostrato sotto:
def value(items):
for item in items:
print(item, end=' ')
value([1,2,3,4])
1 2 3 4
-
file: Un oggetto file-like (stream); predefinito all’attuale sys.stdout. Qui puoi indicare il file in cui desideri scrivere o aggiungere l’output della funzione print.Usando l’argomento file, puoi salvare l’output della funzione print su un file in vari formati come
.csv,.txt, ecc. Capciamolo con un esempio in cui iteri su ogni elemento della lista e lo salvi in un file di testo. Per farlo, per prima cosa aprirai un file di testo in modalitàappendin cui salverai l’output della print. Poi definirai la funzione il cui output verrà aggiunto al file di testo.
file = open('print.txt','a+')
def value(items):
for item in items:
print(item, file=file)
file.close() # chiudi il file una volta completata l’esecuzione della funzione.
value([1,2,3,4,5,6,7,8,9,10])
Una volta completata l’esecuzione della funzione sopra, dovresti vedere un file chiamato print.txt nella tua directory corrente. Apriamolo e vediamone il contenuto.

Dal risultato sopra è chiaro che puoi anche salvare l’output su file e non solo stamparlo nel terminale o nel notebook.
-
flush: Determina se forzare lo svuotamento dello stream. Per impostazione predefinita è False.In genere, l’output su un file o sulla console è bufferizzato, almeno fino a quando non stampi una nuova riga (Fonte). Buffer significa che l’output è memorizzato in una sorta di registro dove risiede prima di essere pronto per essere scritto o prima che il file venga finalmente chiuso. Il compito di flush è assicurarsi che l’output in buffer arrivi a destinazione in modo sicuro.
import time
print('Please enter your email-id : ', end=' ')
#print('Please enter your email-id : ', end=' ', flush=True) #run this to see the difference and comment out the above line of code.
time.sleep(5)
Please enter your email-id :
Se esegui le righe di codice sopra nel terminale, noterai che la stringa di prompt non compare finché il timer di sleep non termina e il programma esce (Fonte). Tuttavia, se aggiungi flush=True nella funzione print, vedrai il prompt e poi dovrai aspettare 5 secondi affinché il programma termini.
In qualche modo Jupyter Notebook o Jupyter Lab se ne occupano e mostrano il prompt prima dei 5 secondi, quindi se vuoi testare questa funzionalità di print, assicurati di eseguirla nel terminale a riga di comando e non nel notebook Jupyter.
Vediamo ora come puoi usare la funzione print per prendere input dall’utente nel notebook Jupyter. Per questo userai la funzione incorporata di Python input().
tutorial_topic = input()
print("The topic of today's tutorial is: ", end='')
print(tutorial_topic)
Print Function
The topic of today's tutorial is: Print Function
Non appena esegui la cella sopra, dovresti vedere un output come mostrato di seguito:

Qui hai definito un argomento facoltativo denominato end che hai visto in precedenza, il quale concatena l’affermazione statica all’interno della print con l’input dell’utente.
Vediamo ora modi più pratici per stampare i valori delle variabili dentro la funzione print.
- Per mostrare il valore di una variabile insieme a una stringa predefinita, ti basta aggiungere una virgola tra i due. Qui non importa la posizione della stringa predefinita e della variabile.
a = 2
b = "Datacamp"
print(a,"is an integer while",b,"is a string.")
2 is an integer while Datacamp is a string.
-
Puoi usare l’argomento
formatin cui puoi passare quante variabili vuoi stampare. Quando passi le variabili nella funzione format, devi specificare i numeri di indice (l’ordine in cui sono inserite nell’argomento di format) nella stringa predefinita. In questo modo la print fungerà da template.Un’altra cosa da ricordare è che qui i numeri di indice sono rappresentati con parentesi graffe
{}che fungono da segnaposto.Capiscilo con l’esempio sotto:
a = 2
b = "Datacamp"
print("{0} is an integer while {1} is a string.".format(a,b))
2 is an integer while Datacamp is a string.
Se metti il numero di indice della seconda variabile in entrambi i punti, come previsto stamperà gli stessi valori, in questo caso la variabile b in entrambi i casi.
print("{1} is an integer while {1} is a string.".format(a,b))
Datacamp is an integer while Datacamp is a string.
-
In modo simile all’argomento
format, dove la tua print funge da template, hai il segno percentuale (%) che puoi usare per stampare i valori delle variabili.Come per format, anche qui c’è il concetto di segnaposto. Tuttavia, a differenza della funzione
formatin cui passi solo i numeri di indice, in questo caso devi anche specificare il tipo di dato che il segnaposto deve aspettarsi.- %d è usato come segnaposto per valori numerici o decimali.
- %s è usato come segnaposto per stringhe.
a = 2
b = "Datacamp"
print("%d is an integer while %s is a string."%(a,b))
2 is an integer while Datacamp is a string.
Vediamo cosa succede se specifichi %s per la variabile a che è un intero.
print("%s is an integer while %s is a string."%(a,b))
2 is an integer while Datacamp is a string.
Come puoi vedere dall’esempio sopra, funziona comunque. Il motivo è che la funzione print ha effettuato implicitamente il typecasting e ha convertito l’intero in stringa. Tuttavia, il contrario non è vero: non riuscirà a convertire una stringa in intero e genererà un TypeError.
Verifichiamolo.
print("%d is an integer while %d is a string."%(a,b))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-121-68c55041ecfe> in <module>
----> 1 print("%d is an integer while %d is a string."%(a,b))
TypeError: %d format: a number is required, not str
Conclusione
Congratulazioni per aver completato il tutorial.
Questo tutorial è stato un buon punto di partenza per i principianti che aspirano a diventare competenti in Python. Potresti voler sperimentare ancora un po’ con la funzione print ed esplorare qualche altra funzionalità che potrebbe essere sfuggita in questo tutorial.
Per qualsiasi domanda relativa a questo tutorial, sentiti libero di scriverla nella sezione commenti qui sotto.
Se stai iniziando con Python e vuoi saperne di più, dai un’occhiata al corso di DataCamp Introduction to Data Science in Python e al Tutorial sulle funzioni in Python.

