Escribe para buscar…

Functional

Esta página todavía no se ha traducido — se muestra en su idioma original:Català

Programació Funcional en Python

El concepte / paradigma de la programació funcional fa referència a un estil de programació que utilitza les funcions com a unitat bàsica de codi.

Hi ha des de llenguatges purament funcionals com ara Haskell o Lisp, fins a llenguatges multiparadigma com Python, així que no és tan fàcil separar els llenguatges que suporten la programació funcional.

Perquè un llenguatge permeti la programació funcional, ha de tractar les funcions com a ciutadans de primera classe. És el que passa amb Python; les funcions són objectes, igual que els strings, els números i les llistes.

Molts llenguatges donen suport a la programació funcional; com Javascript, C#, PHP i Java.

Anem a veure els conceptes més importants per entendre aquest paradigma.

Funcions pures.

Aquest paradigma tracta d’emprar el màxim possible de funcions pures (almenys una segur que hi ha)

Funcions 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 colaterals fora de la funció.

Exemple funció pura:

python
def mult2(i: float) -> float: 
    return i*2

# let's test
assert mult2(4) == 8

Només podrem cridar funcions dins d’altres funcions sempre i quan siguin pures.

Exemple funció impura.

python
name = 'John'
def greetings_from_outside():
  name = 'aaaa',name
  return(f"Greetings from {name}")

És impura perquè està escrivint la sortida amb variables de fora de la funció, utilitza una `variable global name`. 

La podem arreglar:

```py

def greetings_from_outside(name: str):
  return(f"Greetings from {name}")

Pros:

  • Són les funcions més reutilitzables.
  • Més testejables.

És important que les funcions no tinguin gaires línies en general.

Encara que no usem Programació Funcional, val la pena usar funcions pures per minimitzar errors.

Funcions d’ordre superior.

A partir d’una funció pura i una col·lecció (llista, diccionari …) podem aplicar funcions d’ordre dintre dels seus elements.

Ens estalvien usar bucles, i a més a més són més elegants.

Les més habituals són:

  • map, per editar tots els vaqlors
  • filter, per filtrar un subconjunt.
  • reduce, va bé per agrupar valors, però s’utilitza menys.
  • zip, s’utilitza si volem treballar amb tuples.

Més endavant veurem que altres llibreries de dades, com Pandas, accepten funcions pures per recalcular les seves variables.

Ara toca veure amb exemples les possibilitats que ens ofereixen :)

Map.

Crea una llista de números i una funció per multiplicar per 3 un número; per tal que es mostrin per pantalla tots els números de la llista multiplicats per 3.

python

def mult3 (num: float) -> float:
    return num * 3

# range genera sequències de números
# range (num_ini, num_fin, step)
llistaNums: float = list(range(10,40,2))
print("Llista números original.")
print(llistaNums)
print("Llista números multiplicats per 3.")
llistaNumsPer3 = list(map(mult3,llistaNums))
print(llistaNumsPer3)

Filter.

Crea una llista de números (pex de notes d’alumnat) i una funció per a comprovar si el número és major o igual a 5, i fes que es mostrin per pantalla únicament els números de la llista majors o iguals que 5. Finalment, calcula el percentatge de números filtrats (els >=5) arrodonit a 2 decimals.

python

Estás leyendo una vista previa.

Inicia sesión para leer el artículo completo. Cualquier cuenta abre 4 artículos gratuitos al mes; el alumnado y el profesorado leen las páginas de su curso sin límite.

Iniciar sesión