Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Creare nuovi moduli

Come creare nuovi moduli personalizzati su Python, al fine di poterli riutilizzare o distribuire per altri progetti: dalla struttura alla sintassi.
Come creare nuovi moduli personalizzati su Python, al fine di poterli riutilizzare o distribuire per altri progetti: dalla struttura alla sintassi.
Link copiato negli appunti

Abbiamo visto come utilizzare i moduli su Python, al fine di estenderne le funzionalità. È però altresì possibile creare nuovi moduli personalizzati: in questa lezione vedremo come.

In Python, non esiste una vera distinzione tra i moduli/librerie e il file principale che viene eseguito (anche conosciuto in altri linguaggi come main). Qualsiasi file con estensione .py può essere sia eseguito che importato. Per esempio, possiamo creare un file che definisce le quattro operazioni aritmetiche di base:

# aritmetica.py
def add(a, b):
    return a + b
def sub(a, b):
    return a - b
def mul(a, b):
    return a * b
def div(a, b):
    return a / b

Dopo aver salvato questo file come aritmetica.py, possiamo importarlo dall'interprete interattivo o da un altro modulo:

>>> import aritmetica  # importiamo il modulo
>>> aritmetica  # viene creata la variabile aritmetica che si riferisce al modulo
<module 'aritmetica' from '/home/ezio/aritmetica.py'>
>>> aritmetica.add  # possiamo accedere alle funzioni definite all'interno del modulo
<function add at 0xb70d9854>
>>> aritmetica.add(3, 5)  # e possiamo chiamarle
8
>>> aritmetica.mul
<function mul at 0xb70d98e4>
>>> aritmetica.mul(3, 5)
15

Se proviamo a eseguire il file, non otteniamo nessun output ma neanche nessun errore. Questo accade perché aritmetica.py non esegue nessuna operazione che produce output, ma semplicemente definisce quattro funzioni senza mai chiamarle:

$ python3 aritmetica.py
$

In Python esiste una variabile speciale chiamata __name__, il cui valore è la stringa '__main__' se il file è stato eseguito direttamente, o una stringa che rappresenta il nome del modulo se il file è stato importato. Il valore di questa variabile speciale può quindi essere usato per determinare se il file è stato eseguito o importato, usando un idioma molto comune in Python:

if __name__ == '__main__':
    # il file è stato eseguito direttamente

Ad esempio, aggiungendo questo if alla fine di aritmetica.py, possiamo trasformarlo in un programma interattivo che può essere eseguito direttamente:

# aritmetica.py
def add(a, b):
    return a + b
def sub(a, b):
    return a - b
def mul(a, b):
    return a * b
def div(a, b):
    return a / b
if __name__ == '__main__':
    import sys  # importiamo il modulo sys della libreria standard
    # definiamo un dict di operazioni che mappa i nomi con le funzioni corrispondenti
    ops = dict(add=add, sub=sub, mul=mul, div=div)
    # chiediamo all'utente di scegliere l'operazione
    choice = input("Seleziona un'operazione [add/sub/mul/div]: ")
    if choice not in ops:
        # se la scelta non è valida terminiamo il programma con un messaggio d'errore
        sys.exit('Operazione non valida!')
    # assegnamo a op la funzione scelta dall'utente
    op = ops[choice]
    try:
        # chiediamo all'utente di inserire i due valori, e proviamo a convertirli in float
        a = float(input('Inserisci il primo valore: '))
        b = float(input('Inserisci il secondo valore: '))
    except ValueError as err:
        # se la conversione fallisce terminiamo il programma con un messaggio d'errore
        sys.exit('Valore non valido: {}'.format(err))
    # stampiamo il risultato dell'operazione
    print('Il risultato è:', op(a, b))

Se ora proviamo a eseguire aritmetica.py direttamente, il valore di __name__ sarà '__main__', quindi il contenuto dell'if verrà eseguito:

$ python3 aritmetica.py
Seleziona un'operazione [add/sub/mul/div]: add
Inserisci il primo valore: 3
Inserisci il secondo valore: 5
Il risultato è: 8.0
$ python3 aritmetica.py
Seleziona un'operazione [add/sub/mul/div]: mul
Inserisci il primo valore: 3
Inserisci il secondo valore: 5
Il risultato è: 15.0
$ python3 aritmetica.py
Seleziona un'operazione [add/sub/mul/div]: pow
Operazione non valida!
$ python3 aritmetica.py
Seleziona un'operazione [add/sub/mul/div]: sub
Inserisci il primo valore: 3
Inserisci il secondo valore: x
Valore non valido: could not convert string to float: 'x'

Se invece importiamo il modulo, il valore di __name__ sarà 'aritmetica' e quindi l'if non verrà eseguito. Questo ci permette di avere file che funzionano sia quando eseguiti direttamente che quando importati come moduli.

Ti consigliamo anche