3.2 Funcions a Python: definició, arguments, retorn i àmbit

1

Modularització i definició amb la paraula clau def

Les funcions són blocs de codi reutilitzables dissenyats per encapsular una tasca computacional concreta:

$$\text{def nom_funcio(parametre_1, parametre_2):}$$
Exemple:

Definim una funció per calcular l'energia d'un fotó donada la seva longitud d'ona:

$$\text{def energia_foto(longitud_ona): return (6.626e-34 * 3e8) / longitud_ona}$$
2

Paràmetres per defecte i arguments anomenats

Python permet assignar valors predeterminats a la capçalera per fer opcionals certs arguments:

$$\text{def simular_difusio(temperatura, coef=1.5e-9): return coef * (temperatura / 300.0)}$$
Exemple:

Invoquem la funció passant arguments posicionals o arguments amb nom explícit:

$$\text{resultat = simular_difusio(350, coef=2.1e-9)}$$
3

Retorn múltiple i empaquetament de tuples

Una funció pot retornar diversos resultats separant-los per comes, fet que genera internament una tupla immutable:

$$\text{def resoldre_cinetica(v0, a, t): return v0 + a*t, v0*t + 0.5*a*(t**2)}$$
Exemple:

Desempaquetem els valors directament en dues variables independents:

$$\text{v_fin, x_fin = resoldre_cinetica(0.0, 9.8, 2.5)}$$

4. Àmbit de variables: espai local enfront d'espai global

Les variables creades dins del cos d'una funció posseeixen àmbit local i deixen d'existir després de la seva execució:

$$\text{def registrar_mostra(id_val): valor_intern = id_val * 2; return valor_intern}$$
Exemple:

Intentar accedir a variables locals des del cos principal de l'script genera un error NameError:

$$\text{print(valor_intern)} \longrightarrow \text{Error d'àmbit: variable no definida a l'espai global.}$$
Exemple 1: Conversió bidireccional entre escales tèrmiques
$$\text{def kelvin_a_celsius(k): return k - 273.15}$$
$$\text{temp_c = kelvin_a_celsius(300.0)} \longrightarrow 26.85^\circ\text{C}$$
Exemple 2: Funció amb validació defensiva de tipus
$$\text{def calcular_resistencia(voltatge, corrent):}$$
$$\text{if corrent == 0: return None}$$
$$\text{return voltatge / corrent }$$
Exemple 3: Funció que processa i muta una llista in situ
$$\text{def normalitzar_senyals(llista_dades, factor):}$$
$$\text{for i in range(len(llista_dades)): llista_dades[i] *= factor}$$
Exemple 4: Retorn de tupla amb estadístiques bàsiques
$$\text{def extrems_serie(dades): return min(dades), max(dades), sum(dades)/len(dades)}$$
$$\text{minim, maxim, mitjana = extrems_serie([1.2, 4.5, 0.8, 3.1])}$$
Exemple 5: Funció generadora d'identificadors de provetes
$$\text{def generar_etiqueta(prefix, numero, sufix="DAT"): return f"{prefix}_{numero:03d}.{sufix}"}$$
$$\text{print(generar_etiqueta("NANO", 7))} \longrightarrow \text{"NANO_007.DAT"}$$