ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | OpenSource | PhpNuke | Programming | SysAdm | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
UNO SGUARDO AL PYTHON
Uno sguardo al Python
Primo impatto
Sequenze e dizionari
Controllo di flusso
Windows e Java
Classi e Oggetti
Istanze
Classi
Ereditarietà
Eccezioni
Esempio: Gestione Form
Conclusioni
L'Autore


<<< Primo impatto >>>

Python è un interprete. Niente di strano trattandosi di un linguaggio di scripting. A differenza di altri però può essere utilizzato interattivamente. Eseguendo python dalla riga di comando (che sia Unix o NT) otteniamo il prompt (in questo caso su NT):

PythonWin 1.5.1 (#0, Apr 13 1998, 20:22:04) [MSC 32 bit (Intel)]
on win32
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>

Dopo il >>> possiamo digitare dei comandi e quindi eseguire delle semplici operazioni:

>>> 2+2
4

>>> a=5
>>> a+1
6

>>> def sum(a,b): return a+b
>>> sum(4,5)
9

Come si vede, il Python è innanzitutto un valutatore di espressioni, ma consente di assegnare variabili e definire delle funzioni. Fin qui niente di eccezionale. Ora però cominciamo a fare qualcosa un po' più audace.

>>> __builtins__

<module '__builtin__'>

>>> dir(__builtins__)

['ArithmeticError', … OMISSIS …

'abs', 'apply', 'callable', 'chr', 'cmp', 'coerce',
'compile', 'complex', 'delattr', 'dir', 'divmod', 'eval',
'execfile', 'filter', 'float', 'getattr', 'globals', 'hasattr',
'hash', 'hex', 'id', 'input', 'int', 'intern', 'isinstance',
'issubclass', 'len', 'list', 'locals', 'long', 'map', 'max', 'min',
'oct', 'open', 'ord', 'pow', 'range', 'raw_input', 'reduce',
'reload', 'repr', 'round', 'setattr', 'slice', 'str', 'tuple',
'type', 'vars', 'xrange']

La variabile __builtins__ è di tipo modulo, come dice il messaggio ottenuto dalla sua valutazione; si tratta del modulo che contiene tutti i builtins, ovvero le funzioni predefinite del sistema. Per vedere il contenuto di un modulo (o di un qualsiasi namespace in generale - un modulo è un particolare namespace) posso usare il builtin dir, che in questo caso mi consente di elencare tutti gli altri builtin. I builtin sono funzioni immediatamente disponibili senza particolari operazioni. Continuiamo le nostre esplorazioni, provando ad utilizzare un builtin.

>>> open
<built-in function open>
>>> x = open('c:\autoexec.bat')
<open file 'c:\autoexec.bat', mode 'r' at 870920>
>>> dir(x)
['close', 'closed', 'fileno', 'flush', 'isatty',
'mode', 'name', 'read', 'readinto', 'readline', 'readlines',
'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines']
>>> x.readline

<built-in method readline of file object at 8745d0> >>> x.readline() 'rem - By Windows 95 Network - C:\\WINDOWS\\net start\012'

Vediamo se vi è chiaro quello che ho fatto: open è un builtin; infatti valutando open mi viene comunicato che si tratta di una funzione builtin (un oggetto quindi di tipo diverso dal modulo visto prima); questo oggetto può essere usato invocandolo con un parametro, ovvero il nome di un file: così facendo ottengo un altro oggetto che rappresenta un file aperto. Per utilizzare il file lo salvo in una variabile e provo ad esaminarne il contenuto con dir,scoprendo che l'oggetto contiene al suo interno una serie di funzioni (o più correttamente metodi). Provo ad utilizzare la readline, che è una funzione e non una proprietà e quindi invoco la funzione, senza parametri, ottenendo quello che mi aspetto: la prima riga del file AUTOEXEC.BAT che ho aperto.

I builtin sono immediatamente disponibili, ma si tratta di un caso particolare: in generale le funzioni è necessario importarle. Come è possibile accedere ai metodi di un oggetto, è anche possibile accedere alle funzioni presenti in un file, o meglio modulo. Per usare le funzioni di un modulo, occorre importarlo. Vediamo subito come si fa, esaminando il modulo per le espessioni regolari (un assoluto must per chi vuole utilizzare il Python come un sostituto per il Perl).

>>> re
Traceback (innermost last):
 File "<stdin>" , line 0, in ?
NameError: re

>>> import re
>>> re
<module 're'>
>>> match
Traceback (innermost last):
 File "<stdin>" , line 0, in ?
NameError: match

>>> from re import match
>>> match
<function match at 850e90>

Non ci interessa in questa sede il funzionamento del modulo re, per il momento ci limitiamo ad esaminanare il meccanismo di importazione. Inizialmente re non è disponibile, lo diventa dopo che eseguiamo import re. A questo punto possiamo vedere il modulo, ma le funzioni in esso contenute (che in questo caso non sono metodi) sono accessivibili solo con la sintassi puntata: re.match. È però possibile rendere accessibile definitivamente una funzione senza dove specificare il modulo con la sintassi from re import match. Notare che in questo modo viene resa disponibile per l'accesso immediato soltanto una funzione, anche se possono essere importate tutte (ma in generale, a meno di moduli semplici, non è il caso).

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com