edubun
Italiano

Scrivere le tue funzioni

Una funzione che finisce senza return restituisce None, ed è per questo che print(print("hi")) mostra hi e poi None.

Due funzioni che sullo schermo sembrano uguali

La maggior parte dei principianti crede che mostrare un valore e restituirlo siano la stessa cosa. Ecco due funzioni che sembrano entrambe «dare» l'area di un rettangolo. def inizia una definizione di funzione: un nome, gli ingressi tra parentesi, i due punti e un corpo rientrato. Esegui il programma e le due righe di output sembrano uguali.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

show_area(4, 3)
print(area(4, 3))
Output
12
12

Ora prova a usare i risultati in un calcolo. La differenza appare subito.

def show_area(w, h):
    print(w * h)

def area(w, h):
    return w * h

a = show_area(4, 3)
b = area(4, 3)
print(a, b)
print(b * 2)
Output
12
None 12
24

show_area stampa 12 sullo schermo e poi finisce. Non restituisce nulla, e una funzione che non restituisce nulla ritorna il valore speciale None. Quindi a è None. area non stampa niente; restituisce 12 alla riga che l'ha chiamata, e quel 12 si può conservare, stampare o raddoppiare. Stampare serve alle persone che guardano lo schermo. Restituire serve al resto del programma. Se vuoi usare un risultato più tardi, restituiscilo.

Una funzione riceve argomenti, esegue il suo corpo con essi e restituisce un valore con return. area(4, 3) diventa 12 ovunque sia scritta.

I parametri sono i nomi, gli argomenti sono i valori

In def area(w, h):, w e h sono parametri: nomi che esistono solo dentro la funzione. In area(4, 3), 4 e 3 sono argomenti: i valori che riempiono quei nomi per quella singola chiamata. Si abbinano per posizione, quindi il primo argomento va al primo parametro. Chiama la funzione con il numero sbagliato di argomenti e Python si ferma con un TypeError che nomina il parametro mancante.

Un parametro può avere un valore predefinito, scritto con = nella definizione. Chi chiama può lasciare fuori quell'argomento, e viene usato il valore predefinito. Il tutorial di Python mostra i valori predefiniti nella sezione sulla definizione delle funzioni, e sono ovunque nelle funzioni incorporate. Ce l'ha anche print stessa: il suo parametro end ha come predefinito un a capo.

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Mina"))
print(greet("Jun", "Hi"))
print("no new line", end=" ")
print("here")
Output
Hello, Mina!
Hi, Jun!
no new line here

return termina subito la funzione

Una funzione si ferma al primo return che raggiunge, anche se ci sono altre righe sotto. Questo rende i return anticipati un modo pulito di gestire i casi particolari. La funzione qui sotto usa la regola del biglietto dell'unità sull'if, ora impacchettata perché qualsiasi parte di un programma possa chiedere un prezzo.

def ticket_price(age):
    if age < 7:
        return 0
    if age <= 18:
        return 3000
    return 5000

family = [40, 15, 5]
total = 0
for age in family:
    total += ticket_price(age)
print(total)
Output
8000

Le variabili create dentro una funzione sono locali: esistono mentre la funzione gira e spariscono quando finisce. Una variabile chiamata total dentro una funzione non ha niente a che fare con un total fuori. È ciò che ti permette di riutilizzare una funzione senza preoccuparti di quali nomi usi per caso il resto del programma.

defInizia una definizione di funzione
parametroUn nome nella definizione: w in def area(w, h)
argomentoUn valore passato in una chiamata: 4 in area(4, 3)
returnRestituisce un valore e termina la funzione
NoneCiò che una funzione restituisce quando non ha return
variabile localeUna variabile che esiste solo dentro una funzione
  1. Cosa stampa questo codice?
    def double(x):
        return x * 2
    
    print(double(7))
  2. Cosa stampa questo codice?
    def hello():
        print("hi")
    
    result = hello()
    print(result)
    • hi
      hi
    • hi
      None
    • None
    • hi
  3. Cosa stampa questo codice?
    def add(a, b):
        return a + b
    
    print(add(2, 3) * add(1, 1))
  4. Cosa stampa questo codice?
    def f(x):
        return x + 1
        print("never")
    
    print(f(1))
  5. Cosa stampa questo codice?
    def greet(name, greeting="Hello"):
        return greeting + " " + name
    
    print(greet("Bo"))
  6. Cosa stampa questo codice?
    def sign(n):
        if n > 0:
            return "plus"
        if n < 0:
            return "minus"
        return "zero"
    
    print(sign(-4), sign(0))
  7. Cosa stampa questo codice?
    print("a", end="-")
    print("b")
  8. Cosa stampa questo codice?
    def total_of(nums):
        t = 0
        for n in nums:
            t += n
        return t
    
    print(total_of([4, 5, 6]))
  9. In def area(w, h):, come si chiamano w e h?
    • Argomenti
    • Parametri
    • Valori restituiti
    • Parole chiave
  10. Metti le righe in ordine perché il programma stampi 25.
    Output
    25
Errori comuni
  • «Una funzione che stampa la risposta l'ha restituita.» Stampare mostra soltanto il valore. La funzione restituisce comunque None, quindi x = show_area(4, 3) lascia x uguale a None e x * 2 si ferma con TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'.
  • «Posso chiamare una funzione sopra la riga in cui la definisco.» Python esegue dall'alto, quindi a quel punto il nome non esiste ancora: NameError: name 'area' is not defined. Metti il def sopra la prima chiamata.
  • «Lasciare fuori un argomento lo rende semplicemente zero.» Senza un valore predefinito, Python si ferma: area(4) dà TypeError: area() missing 1 required positional argument: 'h'.
Nota per l'insegnanteLa confusione tra print e return è l'incomprensione più comune a questo punto, e si nasconde perché lo schermo sembra identico. Fai conservare il risultato in una variabile e usarlo in un secondo calcolo; il None salta fuori subito. Aiuta il linguaggio: di' che una funzione «restituisce» un valore, e riserva «mostra» a print. Il curricolo coreano di informatica delle medie abbina l'uso delle funzioni alla ricerca e correzione degli errori, quindi gli errori di argomento mancante e di chiamata prima del def sono buon materiale per un breve esercizio di debug.
Punti chiave
  • def name(params): inizia una funzione; il corpo è rientrato.
  • return restituisce un valore e termina la funzione.
  • print mostra un valore; non lo restituisce. Niente return significa None.
  • Gli argomenti riempiono i parametri per posizione; i valori predefiniti riempiono quelli mancanti.
  • Le variabili create dentro una funzione sono locali ad essa.
Fonti di questo corso (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Consultato il: 2026-10-19