ASIX-M3-UF2-A1

De wikiserver
Dreceres ràpides: navegació, cerca

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ó

Funcions

  • 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

Moduls

__init__

  • 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__