Vai al contenuto
eLearner.app
Modulo 5 · Lezione 1 di 417/36 nel corso~12 min
Lezioni del modulo (1/4)

def e return

Una funzione è un blocco di codice riutilizzabile: la definisci una volta con def, poi la chiami quante volte vuoi. Le funzioni rendono il codice modulare, testabile e auto-documentante.

Sintassi base

Python
def saluta(nome):
    return f"Ciao, {nome}!"

saluta("Ada")     # 'Ciao, Ada!'
  • def introduce la funzione, seguito dal nome e dai parametri tra parentesi.
  • I : aprono il blocco indentato.
  • return restituisce un valore al chiamante e termina la funzione.

return (esplicito) vs implicito None

Se non scrivi return, la funzione restituisce None implicitamente:

Python
def stampa_e_basta(x):
    print(x)

risultato = stampa_e_basta("ciao")
# stampa 'ciao'
print(risultato)   # None

return senza valore restituisce anch'esso None ma può servire come early exit:

Python
def primo_pari(nums):
    for n in nums:
        if n % 2 == 0:
            return n
    return None   # esplicito: comunica "non trovato"

Più valori? Restituisci una tuple

Python non ha "out parameters": per restituire più cose torna una tuple (spesso unpacked dal chiamante).

Python
def divisione_resto(a, b):
    return a // b, a % b

quoziente, resto = divisione_resto(17, 5)
# 3, 2

Docstring: documentazione integrata

La prima stringa dentro la funzione è la docstring: appare in help(fn) e negli IDE come tooltip.

Python
def area_cerchio(raggio):
    """Calcola l'area di un cerchio dato il raggio."""
    import math
    return math.pi * raggio ** 2

Scope: variabili locali

Le variabili definite dentro una funzione sono locali: non esistono fuori.

Python
def f():
    x = 10
    return x

f()    # 10
x      # NameError: name 'x' is not defined

Le funzioni restituiscono sempre qualcosa

In Python, se una funzione non dichiara esplicitamente un'istruzione return o ha un return vuoto, restituirà sempre implicitamente il valore speciale None. Non esistono funzioni senza valore di ritorno.

Prova tu

Esercizio#python.m5.l1.e1
Tentativi: 0Caricamento…

Definisci una funzione `double(x)` che restituisce `x * 2`. Poi chiamala con 7 e assegna a `result`. Valuta `result`.

Caricamento editor…
Mostra suggerimento

Usa return x * 2.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#python.m5.l1.e2
Tentativi: 0Caricamento…

Definisci `min_max(nums)` che restituisce una tuple `(minimo, massimo)`. Chiamala su `[3, 1, 4, 1, 5, 9, 2, 6]` e assegna unpacking a `mn, mx`. Valuta `(mn, mx)`.

Caricamento editor…
Mostra suggerimento

return min(nums), max(nums)

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#python.m5.l1.e3
Tentativi: 0Caricamento…

Definisci una funzione `is_palindrome(text)` che restituisca `True` se la stringa passata è uguale alla sua versione invertita, altrimenti `False`. Testa la funzione con `is_palindrome("radar")` come ultima espressione.

Caricamento editor…
Mostra suggerimento

Usa lo slicing text[::-1] per invertire la stringa e confrontala con text.

Soluzione disponibile dopo 3 tentativi