ASIX-M3-UF2-A1
De wikiserver
La revisió el 11:44, 27 des 2020 per Rsort (Discussió | contribucions)
Programació Modular i Paquets en Python
La programació modular consisteix en dividir un programa gran i/o complex en subprogrames més petits o simples, aconseguint fer-lo més comprensible i manejable. Per això, s'implementen funcions, classes i mòduls.
- Funció
- Bloc de codi amb un nom associat.
- Pot rebre zero o més arguments com a entrada.
- Por retornar un valor i/o realitzar una tasca.
- L'us de funcions permet fer una programació estructurada:
- modularització: segmentar un programa complex en mòduls més simples facilitant la programació i la depuració.
- reutilització: una mateixa funció es pot utilitzar des de diferents punts d'un programa i també des de diferents programes.
- Python disposa de moltes funcions integrades i permet la creació de funcions per part dels programadors.
- Sintaxi:
def nomFuncio(arg_1, arg_2, ..., arg_n):
...
return value
- Els arguments es passen per valor: si canvien el seu valor dins de la funció, no canvien "a fora".
- Per modificar variable no locals a la funció, cal definir-les com a globals en la primera línia.
def nomFuncio(arg_1, arg_2, ..., arg_n):
global var_1, var_2
...
return value
- Exemple senzill:
>>> def salutacio(nom):
... print("Hola "+ nom + "!")
...
>>> salutacio("Pep")
Hola Pep!
- Mòduls
- Un mòdul és un arxiu amb un codi independent i una determinada funcionalitat.
- Pot ser utilitzat per qualsevol aplicació.
- Es poden utilitzar mòduls propis de python, de tercers o propis.
- Conté funcions, classes, definicions, ...
- Per poder utilitzar un mòdul s'ha d'importar prèviament.
import modul # 'modul': nom del mòdul a importar
- Si volem importar només algunes parts del mòdul:
from modul import funcio_1, funcio_2 # 'funcio_x': funcions del mòdul.
- Paquets
- S'utilitza per organitzar els mòduls.
- Pot contenir mòduls i altres paquets.
- Per tractar un directori com a paquet cal que contingui el fitxer __init.py__
- __init.py__ pot:
- estar buit.
- contenir codi d'inicialització del paquet.
- contenir el conjunt de variables __ALL__.
jocCombat / |-__init__.py |-regles / |-__init__.py |-monedes.py |-lluitador.py |-bestiari.py |-combat.py |-interficie / |-__init__.py |-entradaTeclat.py |-sortidaPantalla.py
- Es poden importar submòduls individualment:
>>>import jocCombat.regles.lluitador # Càrrega el mòdul lluitador
>>>jocCombat.regles.lluitador.danyar(lluitador, 2) # Cal fer referència al nom complert
- Es pot importar el submòul:
>>>from jocCombat.regles import lluitador # Càrrega el mòdul lluitador
>>>lluitador.danyar(lluitador, 2) # No cal utilitzar el prefix del paquet
- Es poden només les funcions que necessitem:
- Es pot importar el submòul:
>>>from jocCombat.regles.lluitador import danyar # Càrrega la funció lluitador
>>>danyar(lluitador, 2) # Utilitzem directament la funció
- La forma from jocCombat import * importaria tots els submòduls:
- En general, no és recomanable.
- Pot ser massa lent.
- Pot tenir efectes no desitjats.
- Es pot definir una llista anomenada __all__ amb els mòduls que s'importaran quan s'utilitzi import *-
- Per exemple, si l'arxiu jocCombat/regles/__init__.py conté el codi:
__all__ = ["llluitador", "bestiari"]
- Aleshores:
>>>from jocCombat.regles import * # només s'importaran els mòduls de la llista __all__