En aquesta pàgina s'explica com s'utilitzen els arguments de funcions i com no s'utilitzen. Primer fem una analogia amb les funcions matemàtiques i després apliquem la mateixa lògica de les funcions matemàtiques a la programació.
La gràcia de fer servir funcions és que divideixes un problema (dibuixar una cara) en petites parts independents entre sí (ulls, nas, boca...).
És semblant a les matemàtiques:
Tens una funció, per exemple: f(x,y) = x^2+y^2
Pots preguntar-te: Quant val f(3,4)
? Associes el 3
amb la x
, el 4
amb la
y
i trobes 25
.
Pots preguntar-te: Si z=3
i t=4
, quant val f(z, t)
? Associes la z
amb la
x
, la t
amb la y
i trobes 25
.
Pots preguntar-te: Si x=3
i y=4
, quant val f(x, y)
? Associes la x
amb la
x
, la y
amb la y
i trobes 25
.
Fixa't que en el darrer cas es dóna una coincidència: Les variables de fora la funció coincideixen amb les variables de dins de la funció.
El que no faràs mai a matemàtiques és dir: f(x,y) = z^2 + t^2
No ho faràs perquè estaràs fent servir les variables z
i t
que no són els arguments
de la funció i no estan definides a dins la funció.
A Python cal fer funcions de la mateixa manera:
Si una tortuga es diu "paula" en un programa, i fem la funció (malament):
def dibuixar_ull(tortuga,x,y,escala):
"""Dibuixa un ull"""
radi = int(10*escala) # el int() ens assegura que radi sigui enter
paula.penup()
paula.goto(x,y-radi) # ens situem a la part inferior de l'ull
paula.setheading(0) # mirant a la dreta
paula.pendown()
paula.circle(radi) # dibuixem el cercle de l'ull
Aquesta funció fallarà, doncs paula
no està definit dins de la funció. És com si estiguéssim fent f(x,y) = z^2 + y^2
.
Podem provar la funció amb un programa:
#Programa:
import turtle
finestra= turtle.Screen()
finestra.setup(500,500)
finestra.title("Dibuix ull")
paula=turtle.Turtle()
paula.speed("fastest")
dibuixar_ull(paula, 20, 30, 3)
finestra.exitonclick()
Python és prou espavilat com per intentar "mirar a fora" a veure si troba la "paula", i en aquest programa la troba... però... què passarà si més endavant volem dibuixar un ull amb la tortuga "maria"? El Python intentarà buscar la "paula", i tindrem errors quan no la trobi.
A més, tenim un argument anomenat tortuga
en la definició de la funció que
no estem fent servir en tota la funció.
Si fem servir la definició següent:
def dibuixar_ull(tortuga, x, y, escala):
"""Dibuixa un ull"""
radi = int(10*escala) # el int() ens assegura que radi sigui enter
tortuga.penup()
tortuga.goto(x,y-radi)
tortuga.setheading(0)
tortuga.pendown()
tortuga.circle(radi)
i provem el mateix programa d'abans, veurem que al cridar la funció amb:
dibuixar_ull(paula, 20, 30, 3)
El python associa paula
amb tortuga
, 20
amb x
, 30
amb y
i 3
amb
escala
. I tot funciona bé.
A més, si més endavant fem servir una tortuga diferent anomenada “maria” i cridem la funció amb:
dibuixar_ull(maria, 20, 30, 3)
El python associarà maria
amb tortuga
, 20
amb x
, 30
amb y
i 3
amb
escala
. I tot funcionarà bé.