Capitolo 7: Funzioni & Moduli
Definisci funzioni riutilizzabili, documentale con docstring, gestisci argomenti flessibili e organizza il codice in moduli e pacchetti.
Scaricachapter7.py
Obiettivi
- Definire e chiamare funzioni con argomenti posizionali, keyword e di default.
- Scrivere docstring chiare e visualizzarle con
help()
. - Comprendere scope locale vs globale; usare
global
se necessario. - Usare
*args
e**kwargs
per argomenti variabili. - Creare e importare moduli e pacchetti; capire
__name__ == "__main__"
.
1. Definizione di funzioni
Usa def
. Specifica i parametri e restituisci un valore con return
:
def greet(name):
"""Restituisce una stringa di saluto per il nome dato."""
return f"Hello, {name}!"
msg = greet("Alice")
print(msg) # Hello, Alice!
I parametri possono avere valori di default:
def power(base, exp=2):
return base ** exp
print(power(5)) # 25
print(power(2, 3)) # 8
2. Docstring & Scope
Documenta le funzioni con una stringa tripla subito dopo def
:
def add(a, b):
"""
Somma due numeri.
Args:
a (int): primo addendo
b (int): secondo addendo
Returns:
int: somma di a e b
"""
return a + b
help(add)
Le variabili dentro le funzioni sono locali per default:
x = 10
def foo():
x = 5 # x locale
return x
print(foo(), x) # 5 10
Usa global
per modificare variabili di modulo:
counter = 0
def inc():
global counter
counter += 1
3. *args & **kwargs
Accetta argomenti posizionali arbitrari:
def summarize(*args):
return sum(args)
print(summarize(1,2,3,4)) # 10
Accetta argomenti keyword arbitrari:
def config(**kwargs):
for key, val in kwargs.items():
print(f"{key} = {val}")
config(host="localhost", port=8080)
Combine entrambi:
def mixed(a, *args, **kwargs):
print(a, args, kwargs)
mixed(1,2,3, x=10, y=20)
4. Moduli & Pacchetti
Ogni file .py
è un modulo. Importalo con:
# file: math_utils.py
def square(x):
return x*x
# in un altro file
import math_utils
print(math_utils.square(5))
Usa from … import …
per portare nomi nello scope:
from math_utils import square
print(square(6))
Raggruppa moduli in una cartella con __init__.py
per formare un pacchetto:
project/
└── utils/
├── __init__.py
└── math_utils.py
Proteggi il punto di ingresso dello script:
if __name__ == "__main__":
# codice eseguito direttamente
pass
Esercizi
- Scrivi una funzione
multiply(a, b=1)
e testala con argomenti diversi. - Crea un modulo
stats.py
conmean()
emedian()
, poi importalo e usalo. - Implementa una funzione che accetta argomenti posizionali e keyword arbitrari e li stampa.
- Costruisci un pacchetto
mypkg
con due moduli e mostra come importarli.