Funzioni in Python

Le funzioni sono uno dei concetti fondamentali in Python. Una funzione è un blocco di codice riutilizzabile che può essere chiamato in diversi punti del programma per eseguire una specifica operazione. Le funzioni permettono di evitare la ripetizione del codice, migliorano la leggibilità e facilitano la manutenzione dei programmi.


Definire una funzione

In Python, le funzioni vengono definite utilizzando la parola chiave def, seguita dal nome della funzione, dalle parentesi tonde (che possono contenere parametri) e dai due punti :. Il blocco di codice della funzione è indentato.

Sintassi di base

def nome_funzione():
    # Blocco di codice che esegue un'operazione
    pass  # 'pass' indica che non c'è codice qui (opzionale)

Esempio: funzione semplice

def saluta():
    print("Ciao, benvenuto!")
    
# Chiamata della funzione
saluta()  # Output: Ciao, benvenuto!

Funzioni con parametri

Le funzioni possono accettare uno o più parametri. I parametri sono variabili che vengono passate alla funzione quando viene chiamata. Questi parametri consentono di fornire dati che la funzione utilizzerà al suo interno.

Esempio con parametri

def saluta_persona(nome):
    print(f"Ciao, {nome}!")
    
saluta_persona("Alice")  # Output: Ciao, Alice!
saluta_persona("Mario")  # Output: Ciao, Mario!

In questo esempio, la funzione saluta_persona() accetta un parametro chiamato nome che viene utilizzato all’interno della funzione.


Funzioni con valori di ritorno (return)

Le funzioni possono restituire un valore utilizzando la parola chiave return. Una volta eseguito il return, l’esecuzione della funzione si interrompe e il valore viene restituito al chiamante.

Esempio con valore di ritorno

def somma(a, b):
    return a + b

risultato = somma(3, 4)
print(risultato)  # Output: 7

In questo caso, la funzione somma() accetta due parametri, li somma e restituisce il risultato con return.


Parametri con valori di default

È possibile assegnare dei valori di default ai parametri di una funzione. Se la funzione viene chiamata senza specificare quel parametro, verrà utilizzato il valore di default.

Esempio di parametri con valori di default

def saluta(nome="Amico"):
    print(f"Ciao, {nome}!")
    
saluta()  # Output: Ciao, Amico!
saluta("Francesco")  # Output: Ciao, Francesco!

In questo esempio, il parametro nome ha un valore di default "Amico". Se la funzione viene chiamata senza argomenti, utilizzerà quel valore di default.


Funzioni con più parametri

Le funzioni possono accettare più parametri separati da virgole.

Esempio con più parametri

def moltiplica(a, b, c):
    return a * b * c

risultato = moltiplica(2, 3, 4)
print(risultato)  # Output: 24

In questo caso, la funzione moltiplica() accetta tre parametri e restituisce il prodotto dei tre numeri.


Funzioni con argomenti variabili (Args e Kwargs)

Python consente di definire funzioni che possono accettare un numero arbitrario di argomenti. Questo si realizza utilizzando gli argomenti posizionali variabili *args o gli argomenti keyword variabili **kwargs.

Argomenti Posizionali Variabili (*args)

Utilizzando *args, una funzione può accettare un numero variabile di argomenti.

def somma_tutti(*numeri):
    return sum(numeri)

risultato = somma_tutti(1, 2, 3, 4, 5)
print(risultato)  # Output: 15

In questo esempio, la funzione somma_tutti() può accettare un numero variabile di numeri e restituire la loro somma.

Argomenti Keyword Variabili (**kwargs)

Con **kwargs, una funzione può accettare un numero variabile di argomenti sotto forma di coppie chiave-valore.

def stampa_informazioni(**dati):
    for chiave, valore in dati.items():
        print(f"{chiave}: {valore}")

stampa_informazioni(nome="Mario", eta=23, lavoro="Studente")
# Output:
# nome: Mario
# eta: 23
# lavoro: Studente

In questo esempio, la funzione stampa_informazioni() accetta argomenti con nome e li stampa in formato chiave-valore.


Scope delle variabili (Locale e Globale)

Le variabili definite all’interno di una funzione hanno uno scope locale, cioè esistono solo all’interno della funzione stessa. Le variabili definite al di fuori delle funzioni hanno uno scope globale e possono essere accessibili da qualunque parte del programma.

Esempio di scope locale

def funzione():
    x = 10  # Variabile locale
    print(x)

funzione()  # Output: 10
# print(x) genererà un errore, perché x non esiste fuori dalla funzione

Esempio di scope globale

x = 5  # Variabile globale

def funzione():
    print(x)

funzione()  # Output: 5