Capitolo 7: Funzioni & Moduli

Definisci funzioni riutilizzabili, documentale con docstring, gestisci argomenti flessibili e organizza il codice in moduli e pacchetti.

Scarica chapter7.py

Obiettivi

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

  1. Scrivi una funzione multiply(a, b=1) e testala con argomenti diversi.
  2. Crea un modulo stats.py con mean() e median(), poi importalo e usalo.
  3. Implementa una funzione che accetta argomenti posizionali e keyword arbitrari e li stampa.
  4. Costruisci un pacchetto mypkg con due moduli e mostra come importarli.