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
def saluta(nome):
return f"Ciao, {nome}!"
saluta("Ada") # 'Ciao, Ada!'defintroduce la funzione, seguito dal nome e dai parametri tra parentesi.- I
:aprono il blocco indentato. returnrestituisce un valore al chiamante e termina la funzione.
return (esplicito) vs implicito None
Se non scrivi return, la funzione restituisce None implicitamente:
def stampa_e_basta(x):
print(x)
risultato = stampa_e_basta("ciao")
# stampa 'ciao'
print(risultato) # Nonereturn senza valore restituisce anch'esso None ma può servire come early
exit:
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).
def divisione_resto(a, b):
return a // b, a % b
quoziente, resto = divisione_resto(17, 5)
# 3, 2Docstring: documentazione integrata
La prima stringa dentro la funzione è la docstring: appare in help(fn)
e negli IDE come tooltip.
def area_cerchio(raggio):
"""Calcola l'area di un cerchio dato il raggio."""
import math
return math.pi * raggio ** 2Scope: variabili locali
Le variabili definite dentro una funzione sono locali: non esistono fuori.
def f():
x = 10
return x
f() # 10
x # NameError: name 'x' is not definedLe 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
Definisci una funzione `double(x)` che restituisce `x * 2`. Poi chiamala con 7 e assegna a `result`. Valuta `result`.
Mostra suggerimento
Usa return x * 2.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
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)`.
Mostra suggerimento
return min(nums), max(nums)
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
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.
Mostra suggerimento
Usa lo slicing text[::-1] per invertire la stringa e confrontala con text.
Soluzione disponibile dopo 3 tentativi