Lezione 13-I Moduli…
Febbraio 1, 2007
Quando i programmi diventano più grossi non è buona scelta lasciare tutto su un’unico file,in quanto la gestione risulta più complicata.
Allora in questi casi conviene dividere il programma in sotto-programmi salvati in script e richiamarli nel corpo principale del nostro programma.Questi script esterni vengo chiamati moduli,già di essi ne esistono moltissimi per risolvere svariati problemi.
La sintassi per richiamarlo all’interno del nostro programma è:
import NomeModulo
per sapere i metodi che ha un determinato modulo direttamente dalla consolle interattiva scriviamo:
import NomeModulo
dir(NomeModulo)
ad esempio:
>>import time
>>dir(time)
['__doc__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']
usando il comando import,in pratica importiamo nel nostro programma tutte le funzioni(quelle elencate tramite il comando dir),e per richiamarne una dobbiamo utilizzare la sintassi:
NomeModulo.NomeFunzione
ad esempio se vogliamo stampare che giorno è oggi basta scrivere:
>>>import time
>>>lista=time.localtime() #ci crea una lista con giorno,mese,anno e l’orario
>>>giorno=lista[2] #estrapolo dalla lista il valore del giorno
se invece vogliamo importare nel nostro programma solo una funzione di un determinato modulo scriviamo:
from NomeModulo import NomeFunzione
scriviamo così:
>>>from time import daylight
>>>daylight
In questo caso dato che abbiamo importato solo una specifica funzione del modulo per richiamarla basta solo il nome della funzione.
Come potete capire non è possibile presentare tutti i moduli che sono disponibili perchè sono in numero elevato,per trovare l’elenco completo vi rimando all’indice ufficiale:http://docs.python.org/modindex.html
Entry Filed under: Python. .
11 Comments Add your own
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed
1.
Beppe | Febbraio 4, 2007 at 8:59 am
“ad esempio se vogliamo stampare che giorno è oggi basta scrivere:”
>>>import time
>>>time.daylight
Sicuro?
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import time
>>> dir(time)
['__doc__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime',
'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 's
truct_time', 'time', 'timezone', 'tzname']
>>> time.daylight
1
>>>
2.
akus85 | Febbraio 4, 2007 at 10:58 am
L’ho sistemato…in effetti daylight non restituisce il giorno…
3.
Daniele | Febbraio 6, 2007 at 3:21 pm
“>>>lista=time.localtime() #ci crea una lista con giorno,mese,anno e l’orario”
io qui metterei in ordine l’output:
“>>>lista=time.localtime() #ci crea una lista con: anno, mese, giorno, ore, minuti, secondi, giorno della settimana, …”
In questo modo il comando seguente diventa più comprensibile.
Ciao
Daniele
4.
Simosito | Febbraio 6, 2007 at 6:32 pm
E se si tratta di importare un file py semplice si fa
import xxx.py?
e se si fa così, come lo si richiama?
xxx.py.funzione()
o
xxx.funzione()?
5.
Daniele | Febbraio 6, 2007 at 8:50 pm
E se si tratta di importare un file py semplice si fa
import xxx.py?
I moduli *sono* file “py semplici”…
import xxx
xxx.funzione()
Ciao
Daniele
6.
Beppe | Febbraio 7, 2007 at 4:17 am
Per rendere più compresibile ed usabile la chiamata a time.localtime() ,prendendo lo spunto dal post di Daniele ed applicando le nozioni delle lezioni precedenti ho scritto questo.
Se qualcuno lo vuole migliorare…
Le due funzioni convertono i dati del mese e del giorno della settimana da numeri a stringhe.
import time
Tempo=time.localtime()
def Mese(x):
Mesi = ['Gennaio','Febbraio',
'Marzo','Aprile',
'Maggio', 'Giugno', 'Luglio',
'Agosto','Settembre','Ottobre','Novembre','Dicembre']
return Mesi[x]
def Giorno(x):
Giorni = ["Lunedi'","Martedi'",
"Mercoledi'","Giovedi'",
"Venerdi'", "Sabato", "Domenica"]
return Giorni[x]
print “Oggi e’”
print Giorno(Tempo[6]-1),Tempo[2],Mese(Tempo[1]-1),Tempo[0]
print ‘e sono le ‘
print Tempo[3],’:',Tempo[4],’:',Tempo[5]
raw_input(“Premere enter per uscire”)
7.
akus85 | Febbraio 7, 2007 at 8:18 am
Grazioso questo esempio..!!
8.
Daniele | Febbraio 7, 2007 at 11:54 am
Una osservazione…
La definizione di Mesi e Giorni la lascerei fuori dalle funzioni, considerandole come delle costanti.
import time
MESI = [’Gennaio’, 'Febbraio’, ‘Marzo’, 'Aprile’,
‘Maggio’, ‘Giugno’, Luglio’, ‘Agosto’, 'Settembre’,'Ottobre’,'Novembre’,'Dicembre’]
GIORNI = [”Lunedi’”, ”Martedi’”, “Mercoledi’”,”Giovedi’”,
“Venerdi’”, “Sabato”, “Domenica”]
Tempo=time.localtime()
def Mese(x):
return MESI[x]
def Giorno(x):
return GIORNI[x]
print “Oggi e’”
print Giorno(Tempo[6]-1),Tempo[2],Mese(Tempo[1]-1),Tempo[0]
print ‘e sono le ‘
print Tempo[3],’:',Tempo[4],’:',Tempo[5]
raw_input(”Premere enter per uscire”)
Ciao
Daniele
9.
Daniele | Febbraio 7, 2007 at 12:00 pm
“>
Perché non venga persa l’indentazione, ho cercato di usare il tag
ma sembra che abbia fatto effetto solo nella prima riga seguente il tag stesso...Come si usa?
Grazie
Daniele
10.
Beppe | Febbraio 7, 2007 at 5:27 pm
Applichiamo la tecnica di importazione dei moduli.
Dividiamo l’esempio precedente in due file e li salviamo nella stessa directory.
Il primo file lo chiamiamo Data.py
‘************************************************
import time
import Dati
Tempo=time.localtime()
print “Oggi e’”
print Dati.Giorno(Tempo[6]-1),Tempo[2],Dati.Mese(Tempo[1]-1),Tempo[0]
print ‘e sono le ‘
print Tempo[3],’:',Tempo[4],’:',Tempo[5]
raw_input(“Premere enter per uscire”)
‘************************************************
il secondo file (modulo) che importeremo nel primo lo chiamiamo Dati.py e ci mettiamo le funzioni e le variabili per convertire i mesi ed i giorni della settimana
‘************************************************
Mesi = ['Gennaio','Febbraio',
'Marzo','Aprile',
'Maggio', 'Giugno', 'Luglio',
'Agosto','Settembre','Ottobre','Novembre','Dicembre']
Giorni = ["Lunedi'","Martedi'",
"Mercoledi'","Giovedi'",
"Venerdi'", "Sabato", "Domenica"]
def Mese(x):
return Mesi[x]
def Giorno(x):
return Giorni[x]
‘************************************************
Lanciamo il primo file ed il gioco è fatto.
Nota che per lanciare le funzioni delmodulo importato le devo chiamare così
Dati.Giorno(Tempo[6]-1)
e non
Giorno(Tempo[6]-1)
cioè devo anteporre il nome del modulo che contiene la funzione.
P.S.
Come suggerito da Daniele adesso le liste dei giorni e dei mesi sono fuori dalle funzioni.
11.
Daniele | Febbraio 8, 2007 at 6:09 pm
Giusto per giocare con gli interessanti stimoli che mi avete dato, presento una rielaborazione della libreria data.py:
—8
“”"
Modulo che incapsula alcune funzioni del modulo time.py.
“”"
import time
# Costanti
MESI = ['Gennaio', 'Febbraio', 'Marzo', 'Aprile',
'Maggio', 'Giugno', 'Luglio', 'Agosto',
'Settembre','Ottobre', 'Novembre', 'Dicembre']
GIORNI = ['Lunedì', 'Martedì', 'Mercoledì', 'Giovedì',
'Venerdì', 'Sabato', 'Domenica']
MINUTO=60
ORA=3600
GIORNO=ORA*24
# Funzioni
def anno(t):
return t[0]
def mese(t):
return t[1]
def giorno(t):
return t[2]
def ore(t):
return t[3]
def minuti(t):
return t[4]
def secondi(t):
return t[5]
def mesel(t):
“”"Mese lungo.”"”
return MESI[t[1]-1]
def giornos(t):
“”"Giorno della settimana.”"”
return GIORNI[t[6]]
def datalunga(tempo=None):
“”"Nel formato: giorno settimana, giorno, mese lungo, anno.”"”
t=time.localtime(tempo)
return “%s %s %s %s” % (giornos(t), giorno(t), mesel(t), anno(t))
def orario(tempo=None):
“”"Nel formato: ore:minuti:secondi.”"”
t=time.localtime(tempo)
return “%s:%s:%s” % (ore(t), minuti(t), secondi(t))
---8
import time, data
print "oggi è:", datalunga()
print "dieci giorni fa era:", datalunga(time.time()-10*GIORNO)
print "fra dieci giorni sarà:", datalunga(time.time()+10*GIORNO)
print "ore:", orario()
print "dieci ore e mezza fa erano le:", orario(time.time()-10.5*ORA)
print "fra dieci ore saranno le:", orario(time.time()+10*ORA)
---8