Le biblioteche
Ultimo aggiornamento il 2025-11-06 | Modifica questa pagina
Panoramica
Domande
- Come si può utilizzare il software scritto da altri?
- Come posso scoprire cosa fa questo software?
Obiettivi
- Spiegare cosa sono le librerie software e perché i programmatori le creano e le usano.
- Scrivere programmi che importano e utilizzano moduli della libreria standard di Python.
- Trovare e leggere la documentazione della libreria standard in modo interattivo (nell’interprete) e online.
La maggior parte della potenza di un linguaggio di programmazione è nelle sue librerie.
- Una libreria è una raccolta di file (chiamati
moduli) che contiene funzioni utilizzabili da altri programmi.
- Può contenere anche valori di dati (ad esempio, costanti numeriche) e altro.
- I contenuti della libreria dovrebbero essere correlati, ma non c’è modo di farlo rispettare.
- La libreria standard di Python è un’ampia suite di moduli fornita con Python stesso.
- Molte altre librerie sono disponibili su PyPI (l’indice dei pacchetti Python).
- Vedremo più avanti come scrivere nuove librerie.
Librerie e moduli
Una libreria è un insieme di moduli, ma i termini sono spesso usati in modo intercambiabile, soprattutto perché molte librerie sono costituite da un solo modulo, quindi non preoccupatevi se li mischiate.
Un programma deve importare un modulo di libreria prima di utilizzarlo.
- Usare
importper caricare un modulo di libreria nella memoria di un programma. - Quindi fare riferimento agli elementi del modulo come
module_name.thing_name.- Python usa
.per indicare “parte di”.
- Python usa
- Utilizzo di
math, uno dei moduli della libreria standard:
OUTPUT
pi is 3.141592653589793
cos(pi) is -1.0
- Bisogna fare riferimento a ogni elemento con il nome del modulo.
-
math.cos(pi)non funziona: il riferimento apinon “eredita” in qualche modo il riferimento della funzione amath.
-
Usare help per conoscere il contenuto di un modulo di
libreria.
- funziona come l’aiuto per una funzione.
OUTPUT
Help on module math:
NAME
math
MODULE REFERENCE
http://docs.python.org/3/library/math
The following documentation is automatically generated from the Python
source files. It may be incomplete, incorrect or include features that
are considered implementation detail and may vary between Python
implementations. When in doubt, consult the module reference at the
location listed above.
DESCRIPTION
This module is always available. It provides access to the
mathematical functions defined by the C standard.
FUNCTIONS
acos(x, /)
Return the arc cosine (measured in radians) of x.
⋮ ⋮ ⋮
Importare elementi specifici da un modulo di libreria per abbreviare i programmi.
- Usare
from ... import ...per caricare solo elementi specifici da un modulo di libreria. - quindi fare riferimento ad essi direttamente senza il nome della libreria come prefisso.
OUTPUT
cos(pi) is -1.0
Creare un alias per un modulo di libreria quando lo si importa per accorciare i programmi.
- Usare
import ... as ...per dare a una libreria un breve alias durante l’importazione. - Quindi fare riferimento agli elementi della libreria usando questo nome abbreviato.
OUTPUT
cos(pi) is -1.0
- comunemente usato per le librerie usate di frequente o con nomi
lunghi.
- Ad esempio, la libreria per grafici
matplotlibè spesso indicata con l’aliasmpl.
- Ad esempio, la libreria per grafici
- Ma può rendere i programmi più difficili da capire, poiché i lettori devono imparare gli alias del programma.
Esplorazione del modulo math
- Quale funzione del modulo
mathsi può usare per calcolare una radice quadrata senza usaresqrt? - Poiché la libreria contiene questa funzione, perché esiste
sqrt?
Usando
help(math)vediamo che abbiamopow(x,y)in aggiunta asqrt(x), quindi potremmo usarepow(x, 0.5)per trovare una radice quadrata.La funzione
sqrt(x)è probabilmente più leggibile dipow(x, 0.5)nell’implementazione delle equazioni. La leggibilità è una pietra miliare della buona programmazione, quindi ha senso fornire una funzione speciale per questo specifico caso comune.
Inoltre, il design della libreria math di Python ha
origine nello standard C, che include sia sqrt(x) che
pow(x,y), quindi un po’ di storia della programmazione si
ritrova nei nomi delle funzioni di Python.
Individuazione del modulo giusto
Si vuole selezionare un carattere casuale da una stringa:
- Quale modulo della libreria standard potrebbe aiutarvi?
- Quale funzione scegliereste da quel modulo? Ci sono alternative?
- Provate a scrivere un programma che utilizzi la funzione.
Il modulo random sembra essere utile.
La stringa ha 11 caratteri, ognuno dei quali ha un indice posizionale
da 0 a 10. Si possono usare le funzioni random.randrange
o random.randint
per ottenere un numero intero casuale compreso tra 0 e 10, e poi
selezionare il carattere bases a quell’indice:
o in modo più compatto:
Forse avete trovato la funzione random.sample?
Consente di risparmiare di digitare troppo, ma potrebbe essere un po’
più difficile da capire leggendo:
Si noti che questa funzione restituisce un elenco di valori. Impareremo a conoscere gli elenchi in [episodio 11] (11-lists.md).
La soluzione più semplice e breve è la funzione random.choice
che fa esattamente quello che vogliamo:
Jigsaw Puzzle (problema di Parson)
Riorganizzare le seguenti istruzioni in modo da stampare una base di DNA casuale e il suo indice nella stringa. Non tutte le istruzioni sono necessarie. Sentitevi liberi di usare/aggiungere variabili intermedie.
Quando è disponibile l’aiuto?
Quando un vostro collega digita help(math), Python
segnala un errore:
ERRORE
NameError: name 'math' is not defined
Cosa ha dimenticato di fare?
Importazione del modulo matematico (import math)
può essere scritto come
Dal momento che avete appena scritto il codice e avete familiarità con esso, potreste trovare la prima versione più facile da leggere. Ma quando si cerca di leggere un molte righe di codice, scritte da qualcun altro, o quando si rivede dopo diversi mesi, i nomi non abbreviati sono spesso più facili, a meno che non ci siano chiare convenzioni di abbreviazione.
Ci sono molti modi per importare le librerie!
Abbinare le seguenti istruzioni di stampa alle chiamate di libreria appropriate.
Comandi di stampa:
print("sin(pi/2) =", sin(pi/2))print("sin(pi/2) =", m.sin(m.pi/2))print("sin(pi/2) =", math.sin(math.pi/2))
Chiamate di libreria:
from math import sin, piimport mathimport math as mfrom math import *
- Chiamate di libreria 1 e 4. Per fare riferimento direttamente a
sinepisenza il nome della libreria come prefisso, è necessario usare l’istruzionefrom ... import .... Mentre la chiamata di libreria 1 importa specificamente le due funzionisinepi, la chiamata di libreria 4 importa tutte le funzioni del modulomath. - Chiamata alla libreria 3. In questo caso,
sinepisono indicati con il nome abbreviato di libreriaminvece dimath. La chiamata di libreria 3 fa esattamente questo usando la sintassiimport ... as ...: crea un alias permathsotto forma di nome abbreviatom. - Chiamata di libreria 2. Qui
sinepisono indicati con il normale nome di libreriamath, quindi è sufficiente la normale chiamataimport ....
Nota: sebbene la chiamata di libreria 4 funzioni,
importare tutti i nomi da un modulo usando un’importazione con caratteri
jolly è sconsigliato, in quanto
rende poco chiaro quali nomi del modulo sono usati nel codice. In
generale, è meglio rendere le importazioni il più specifiche possibile e
importare solo ciò che il codice utilizza. Nella chiamata di libreria 1,
la dichiarazione import ci dice esplicitamente che la
funzione sin è importata dal modulo math, ma
la chiamata di libreria 4 non fornisce questa informazione.
Importazione di elementi specifici
Molto probabilmente questa versione è più facile da leggere, perché è
meno densa. La ragione principale per non usare questa forma di
importazione è quella di evitare scontri di nomi. Per esempio, non si
importerebbe degrees in questo modo se si volesse usare
anche il nome degrees per una propria variabile o funzione.
O se si importasse anche una funzione chiamata degrees da
un’altra libreria.
OUTPUT
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-d72e1d780bab> in <module>
1 from math import log
----> 2 log(0)
ValueError: math domain error
- Il logaritmo di
xè definito solo perx > 0, quindi 0 è fuori dal dominio della funzione. - Si ottiene un errore del tipo
ValueError, che indica che la funzione ha ricevuto un valore di argomento inappropriato. Il messaggio aggiuntivo “errore del dominio matematico” chiarisce il problema.
- La maggior parte della potenza di un linguaggio di programmazione è nelle sue librerie.
- Un programma deve importare un modulo di una libreria per poterlo utilizzare.
- Usare
helpper conoscere il contenuto di un modulo di libreria. - Importazione di elementi specifici da una libreria per abbreviare i programmi.
- Creare un alias per una libreria quando la si importa per abbreviare i programmi.