You are here: Partenza > Dive Into Python > La potenza dell'introspezione > type, str, dir, ed altre funzioni built-in | << >> | ||||
Dive Into PythonPython per programmatori esperti |
Python ha un piccolo insieme di funzioni built-in estremamente utili. Tutte le altre funzioni sono suddivise in moduli. Si tratta di una decisione coscienziosa, per preservare il nucleo del linguaggio dall'essere soffocato come in moltri altri linguaggi di script (coff coff,Visual Basic).
La funzione type restituisce il tipo di dato di ogni oggetto arbitrario. I tipi possibili sono elencati nel modulo types. È utile per le funzioni helper che possono gestire diversi tipi di dati.
>>> type(1) <type 'int'> >>> li = [] >>> type(li) <type 'list'> >>> import odbchelper >>> type(odbchelper) <type 'module'> >>> import types >>> type(odbchelper) == types.ModuleType 1
La funzione str forza i dati in una stringa. Qualunque tipo di dato può essere forzato ad essere una stringa.
>>> str(1) '1' >>> horsemen = ['war', 'pestilence', 'famine'] >>> horsemen.append('Powerbuilder') >>> str(horsemen) "['war', 'pestilence', 'famine', 'Powerbuilder']" >>> str(odbchelper) "<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>" >>> str(None) 'None'
Il cuore della nostra funzione help è la potente funzione dir. dir ritorna una lista di attributi e metodi di ogni oggetto: moduli, funzioni, stringhe, liste, dizionari... praticamente qualunque cosa.
>>> li = [] >>> dir(li) ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>> d = {} >>> dir(d) ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values'] >>> import odbchelper >>> dir(odbchelper) ['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']
li è una lista, quindi dir(li) ritorna una lista di tutti i metodi di una lista. Notate che la lista ritornata contiene i nome dei metodi sotto forma di stringhe, non come veri e propri metodi. | |
d è un dizionario, quindi dir(d) ritorna una lista dei nomi dei metodi di un dizionario. Come minimo uno di questi, keys, dovrebbe suonarvi familiare. | |
Qui comincia a farsi interessante. odbchelper è un modulo, quindi dir(odbchelper) ritorna una lista con ogni genere di cose definite nel modulo, inclusi gli attributi built-in, come __name__ e __doc__ e qualunque altro attributo e metodo voi definiate. In questo caso, odbchelper ha solamente un metodo definito dall'utente, la funzione buildConnectionString che abbiamo studiato nella sezione Conoscere Python. |
Infine, la funzione callable (invocabile ndr) prende ogni tipo di oggetto e ritorna 1 se l'oggetto può essere invocato, 0 in caso contrario. Gli oggetti invocabili includono funzioni, metodi di classi ed anche le classi stesse. (Ulteriori informazioni sulle classi nel capitolo 4).
>>> import string >>> string.punctuation '!""#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' >>> string.join <function join at 00C55A7C> >>> callable(string.punctuation) 0 >>> callable(string.join) 1 >>> print string.join.__doc__ join(list [,sep]) -> string Return a string composed of the words in list, with intervening occurrences of sep. The default separator is a single space. (joinfields and join are synonymous)
Le funzioni nel modulo string sono deprecate (per quanto un sacco di persone continuino ad usare la funzione join), ma il modulo contiene molte costanti utili come string.punctuation, che contiene tutti i caratteri di punteggiatura standard. | |
string.join è una funzione che concatena una lista di stringhe. | |
string.punctuation non è invocabile; è una stringa. (Una stringa ha dei metodi invocabili, ma la stringa stessa non è affatto invocabile.) | |
string.join è invocabile; è una funzione che prende due argomenti. | |
Ogni oggetto invocabile può avere una stringa di documentazione. Usando la funzione callable su ognuno degli attributi di un oggetto, possiamo determinare quali attributi ci interessano (metodi, funzioni, classi) e quali vogliamo ignorare (costanti, etc.), senza sapere nulla in anticipo a proposito dell'oggetto. |
type, str, dir e tutto il resto delle funzioni built-in di Python sono raggruppate in un modulo speciale chiamato __builtin__. (Cioè con due sottolineature prima e dopo.) Se vi può aiutare, potete pensare che Python automaticamente esegua from __builtin__ import * all'avvio, comando che importa tutte le funzioni “built-in” nello spazio dei nomi locale, così che possiate usarle direttamente.
Il vantaggio di vederla in questo modo sta nel fatto che potete accedere a tutte le funzioni ed agli attributi built-in sotto forma di gruppo, ricavando le informazioni dal modulo __builtin__. Indovinate, abbiamo una funzione per fare questo, è chiamata help. Provate voi stessi e scorrete la lista; ci immergeremo in alcune delle funzioni più importanti più tardi. (Alcune delle classi di errore built-in, come AttributeError, dovrebbero già suonarvi familiari.)
>>> from apihelper import help >>> import __builtin__ >>> help(__builtin__, 20) ArithmeticError Base class for arithmetic errors. AssertionError Assertion failed. AttributeError Attribute not found. EOFError Read beyond end of file. EnvironmentError Base class for I/O related errors. Exception Common base class for all exceptions. FloatingPointError Floating point operation failed. IOError I/O operation failed. [...snip...]
Python è dotato di un eccellente manuale di riferimento, che dovreste usare spesso per conoscere tutti i moduli che Python ha da offrire. Ma mentre nella maggior parte dei linguaggi vi ritroverete a dover tornare spesso sul manuale (o pagine man o ... Dio vi aiuti, MSDN) per ricordare come si usano questi moduli, Python è largamente auto-documentante. |
<< Argomenti opzionali ed argomenti con nome |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
Ottenere riferimenti agli oggetti usando getattr >> |