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))12
12Ora 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)12
None 12
24show_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.
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")Hello, Mina!
Hi, Jun!
no new line herereturn 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)8000Le 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.
| def | Inizia una definizione di funzione |
| parametro | Un nome nella definizione: w in def area(w, h) |
| argomento | Un valore passato in una chiamata: 4 in area(4, 3) |
| return | Restituisce un valore e termina la funzione |
| None | Ciò che una funzione restituisce quando non ha return |
| variabile locale | Una variabile che esiste solo dentro una funzione |
- Cosa stampa questo codice?
def double(x): return x * 2 print(double(7)) - Cosa stampa questo codice?
def hello(): print("hi") result = hello() print(result)hi
hihi
NoneNonehi
- Cosa stampa questo codice?
def add(a, b): return a + b print(add(2, 3) * add(1, 1)) - Cosa stampa questo codice?
def f(x): return x + 1 print("never") print(f(1)) - Cosa stampa questo codice?
def greet(name, greeting="Hello"): return greeting + " " + name print(greet("Bo")) - Cosa stampa questo codice?
def sign(n): if n > 0: return "plus" if n < 0: return "minus" return "zero" print(sign(-4), sign(0)) - Cosa stampa questo codice?
print("a", end="-") print("b") - Cosa stampa questo codice?
def total_of(nums): t = 0 for n in nums: t += n return t print(total_of([4, 5, 6])) - In def area(w, h):, come si chiamano w e h?
- Argomenti
- Parametri
- Valori restituiti
- Parole chiave
- Metti le righe in ordine perché il programma stampi 25.Output
25
- «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'.
- 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