Funcions¶
Concepte¶
Anàleg al concepte de funció en matemàtiques (de moment)
Ús¶
Funcions predefinides¶
Una funció predefinida és una funció integrada a Python i disponible sense necessitat d'importar cap mòdul
Per exemple:
Valor absolut:
abs()Conversió de tipus:
float,intMàxim i mínim:
max(),min()Arrodonir:
round()Tipus (o classe) d’un objecte (valor):
typeEscriure a la sortida:
print()
Vegeu la llista completa a la secció python:built-in-funcs del manual python:library/index
Crida d’una funció¶
Sintaxi de la crida d’una funció:
nom_de_la_funció(argument_1, argument_2, ...)
Els arguments són les dades a partir de les quals la funció calcula el resultat
Els arguments són expressions
La crida d’una funció és una expressió que s’avalua al valor descrit a la seva documentació (especificació)
Mòduls¶
Per cridar les funcions o usar les variables d’un mòdul, cal importar-lo. Es pot fer de dues maneres:
Amb la sentència
fromfrom nom_de_mòdul import funció_o_variable_1, funció_o_variable_2...
Només es poden usar les funcions o variables de la llista amb la sintaxi
funció_o_variable_1Amb la sentència
importimport nom_de_mòdul
Es pot usar qualsevol funció o variable definida en el mòdul amb la sintaxi
nom_de_mòdul.funció_o_variable
Exemples d’importació del mòdul
mathImportar amb
from:>>> from math import sin, pi
>>> r = sin(pi/2) >>> print(r) 1.0
Importar amb
import:>>> import math
>>> r = math.sin(math.pi/2) >>> print(r) 1.0
La funció
dir()llista els noms definits per un objecte
Definició¶
Permet posar nom al càlcul d’un resultat a partir d’unes dades (paràmetres)
Sintaxi de la definició d’una funció:
def nom_de_la_funció(llista_de_paràmetres): # capçalera sentències # cos return expressió # resultat
La sentència
defés la capçalera de la definició de la funcióLa capçalera conté el nom de la funció i la llista de paràmetres
Un paràmetre és una variable que correspon a una de les dades nencessàries per tal de calcular el resultat
El cos és un bloc de codi format per una seqüència de sentències
El bloc s’escriu sagnat respecte de la capçalera
El resultat de la funció s’obté a l'avaluar l'expressió de la sentència
returnPer exemple
def recta(a, b, x): y = a*x + b return y
Escriurem la definició d’una funció en un mòdul
Un fitxer amb extensió
.pyés un mòdul
Flux d’execució de la crida d’una funció¶
L’execució de la definició d’una funció associa el nom a l’objecte funció: no altera el flux d’execució
L’avaluació de la crida d’una funció durant l’avaluació d’una expressió comporta:
Avaluar els arguments de la crida
Congelar l'estat del bloc d’activació (stack frame) actual
Crear el bloc d’activació de la funció a la pila de crides (call stack) en què l’estat incial només conté els paràmetres
Executar les sentències del cos fins a trobar una sentència
returnL’execució d’una assignació defineix una variable local
Executar la sentència
returnque implica:Avaluar l’expressió
Destruir el bloc d’activació de la funció
Reprendre l’avaluació de l’expressió on hi ha la crida amb el valor retornat per la funció
Vegeu un exemple a Online Python Tutor: recta
Quan es produeix un error d’execució, l'intèrpret mostra la traça de la pila de crides (traceback o stack trace)
>>> from funcions import f >>> f() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "funcions.py", line 4, in f return 1/0 ~^~ ZeroDivisionError: division by zero
1# mòdul funcions 2 3def f(): 4 return 1/0
Descarregueu el mòdul
funcionsi proveu-lo
Sentència return¶
Les funcions sempre retornen un valor
En una sentència
returnes pot ometre l'expressióAl cos d’una funció pot haver-hi cap, una o més d’una sentències
returnLa funció acaba quan executa la primera sentència
returno quan arriba al final del cosCodi inassolible (unreachable code): les sentències que hi hagi darrera d’una sentència
returnno s’executaran mai
El valor None de tipus Nonetype¶
Quan una funció acaba perquè executa una sentència
returnsense expressió o bé perquè arriba al final del cos, retorna el valorNonede tipusNonetypeVegeu un exemple a Online Python Tutor: oblit
Funcions que retornen més d’un resultat¶
La sintaxi de la sentència
returnquan la funció calcula més d’un resultat ésreturn expressió_1, expressió_2...
Per exemple
>>> def segons_a_hms(s): ... h = s // 3600 ... s = s % 3600 ... m = s // 60 ... s = s % 60 ... return h, m, s
>>> h1, m1, s1 = segons_a_hms(7854) >>> h1 2 >>> m1 10 >>> s1 54 >>> h1*3600 + m1*60 + s1 7854
Àmbit de visibilitat¶
L'àmbit de visibilitat d’una variable o funció és la regió del codi on és accessible.
Python defineix tres àmbits de visibilitat:
global: conté les funcions predefinides i són visibles a tot arreu
mòdul: conté les funcions i variables definides en un mòdul i són visibles en el mòdul on s’han definit
local: conté els paràmetres i les variables locals definides al cos d’una funció i només són visibles al cos de la funció.
Vegeu àmbit de visibilitat en Python a la Viquipèdia
Crides entre funcions¶
Al cos d’una funció es pot cridar qualsevol
Vegeu a l'Online Python Tutor: geom l'exemple del How to Think Like a Computer Scientist
Descarregueu el mòdul
geomi proveu-lo
Funcions d’ordre superior¶
En Python, una funció és un nom que fa referència a un objecte cridable de tipus
functionUna funció d’ordre superior és una funció que
té una funció com a paràmetre o
retorna una funció com a resultat
Per exemple
>>> from funcions import q, parabola_1 >>> q(parabola_1, 0, 1e-3) -1.9970000000000265 >>> from math import cos >>> q(cos, 1, 1e-3) -0.8417409956931188
def q(f, a, h): """Calcula el pendent de la secant que passa per (a, f(a)) i (a+h, f(a+h)). """ r = (f(a + h) - f(a))/h return r def parabola_1(x): return 3*x**2 - 2*x + 1
Descarregueu el mòdul
funcionsi proveu-lo
Documentació d’una funció¶
Documentació d’una funció: python:docstring.
Vegeu les seccions tut-functions i tut-docstrings del python:tutorial/index
Desenvolupament incremental¶
Programació amb estil¶
Vegeu la secció Programming with style del llibre How to Think Like a Computer Scientist
Exercicis¶
Física, punts 1 al 4
Equació de segon grau, punt 1
Zona de cerca, punts de l’1 al 3