Les funcions són blocs de codi que es poden reutilitzar en altres parts del codi.
Funcions
Una manera molt útil d’organitzar el flux d’execució del programa és agrupant un tros de codi en una funció per tal que el puguem cridar en diferents parts del codi sense haver-lo de repetir.
Python disposa de diverses funcions predefinides, com el print, el len() …
Ara aprendrem a crear les nostres pròpies funcions.
En qualsevol projecte informàtic rellevant és fonamental usar funcions i separar-les en diversos Mòduls i/o Objects (que ho veureu una mica més endavant).
Una funció en Python utilitza el mateix concepte que una funció matemàtica.
La capçalera està composta per:
- La paraula reservada
def - el nom de la funció
- els paràmetres d’entrada entre parèntesis
() - i al final
:
El cos de la funció té les instruccions que volem i si ho volem la paraula return i una variable o estructura.
No estem obligats a aplicar cap return, però ens interessa usar un return per a què la funció sigui pura.

Potser et preguntaràs si falten els paràmetres de sortida a la capçalera. No calen.
Anem a veure un parell d’exemples molt simples:
potencia(x, y) = x ^ y
return **
Per provar que realment funciona apliquem uns testos amb assert
assert == 9
assert == 1048576cognom1_cognom2_nom(name, surname1, surname2=“”)
És una funció que mostra un nom i 2 cognoms en l’ordre cognom1 cognom2, nom
Fixa’t que hem definit el paràmetre surname2 com a opcional, si l’usuari no posa res a surname2 s’omple automàticament amb un espai en blanc.
return f
return f
Funcions dins de funcions.
Per tal de descompondre un problema complex en d’altres més petits i senzills podem cridar una funció dins d’una altra funció si ens cal, com es pot veure a l’exemple.
return *
=
return *
= 5
= 3
= 10
# Output: Area: 15
# Output: Volume: 150Paràmetres opcionals.
En moltes ocasions, ens interessa simplificar la crida de les funcions, fent que alguns paràmetres tinguin un valor predeterminat, i que, per tant, no calgui omplir-los si tenen aquest valor predeterminat.
És tan fàcil com ficar el valor predeterminat al costat del paràmetre:
return + + Ho provarem:
assert ==
assert == Docstring.
Per comentar una funció usem aquesta notació; abans del cos:
"""A multi-line
.
"""
# sentencesExercicis.
1. Crea un mètode (funció sense valors de retorn) que agafi el nom i la edat d’una persona.
Si la persona és menor de 16 anys es mostrarà:
En canvi, si té 16 o més anys es mostrarà:
Show solution
"""
.
"""
2. Crea una funció per calcular el preu d’un producte.
Tindrà 3 paràmetres: el preu, l’IVA (opcional), que per defecte serà el 21% i el descompte (opcional), que per defecte serà 0.
Prova el codi mitjançant asserts (tests).
"""
-
- , 0.0
- 0.21
"""
return - * + *
# print(f"{preu_final(100)}")
assert == 121.0
assert == 101.0
assert == 94.0Show solution
# Exercici 2: Preu final amb IVA i descompte
"""
"""
return - * + * 3. Crea una funció que calculi la mitjana aritmètica d’una llista de números (per exemple, edats).
Prova el codi mitjançant 2 o 3 asserts (tests).
Revisa el tutorial https://xtec.dev/python/list
Show solution
# Exercici 3: Mitjana aritmètica d'una llista
"""
None .
"""
return None
return /
# Tests
assert == 20.0
assert == 20.0
assert is None4. Crea un mètode que cerqui dins d’un diccionari totes les dades d’una persona si existeix.
Si no existeix que surti el text “No s’ha trobat la persona”.
El diccionari d’exemple que pots usar és el següent:
= ,
,
,
,
,
,
]Si necessites usar assets, aquí en tens algún:
# Tests
assert ==
assert ==
assert == Revisa el tutorial https://xtec.dev/python/data
Show solution
"""
, """
# Usem lower per a què converteixi la entrada en minúsucules.
return
return Type Hinting
Des de fa uns anys s’utilitza el Type Hinting en Python, per informar els programadors els tipus de dades de cara variable, paràmetres i valors de retorn.
És important que us acostumeu a veure-ho i probablement us ho demanen com a bona pràctica d’estil de codificació.
La pròxima funció la definirem amb aquests Type Hinting; van entre 2 punts en variables i arguments, i tenen una fletxeta en els paràmetres de sortida.
return **
Per aprofundir en l’ús de funcions, segueix llegint:
Funcions pures.
Per tal de crear funcions senzilles d’entendre’s i de provar automàticament (per exemple, amb Pytest) han de complir el necessari per a ser pures:
- Sol llegeix els seus paràmetres d’entrada
- Sol escriu els seus paràmetres de sortida
- Pels mateixos paràmetres d’entrada sempre retorna els mateixos paràmetres de sortida.
- No tenen efectes col·laterals fora de la funció.
Exemple funció pura:
return *2
# let's test
assert == 8Només podrem cridar funcions dins d’altres funcions sempre que siguin pures. I només podem testejar funcions pures.
Exemple funció impura.
=
= ,
returnÉs impura perquè està escrivint la sortida amb variables de fora de la funció, utilitza una variable global name.
La podem arreglar:
returnUna altra recomanació és que les funcions no tinguin gaires línies en general.
Exercicis
1. L’ADN es pot representar amb un str, i les bases amb els caràcters "A", "G", "C" i "T".
Crea una funció que calculi l’aparició d’una de les bases:
Show solution
"""Compta el número d'aparicions de la base"""
= 0
+= 1
return Crea una funció que calculi el percentage GC (el d’aparició de G i C):
Show solution
"""Retorna el percentatge GC"""
= 0
+= 1
=
return