D. Glossario

>>>
Il tipico prompt di Python della shell interattiva. Spesso si vedono esempi di codice che possono mostrare il codice partendo dalla destra dell'interprete.

...
Il tipico prompt di Python della shell interattiva quando il codice immesso riguarda blocchi di codice indentato.

BDFL
Il ``benevolo dittatore per la vita'', ovvero Guido van Rossum, il creatore di Python.

byte code
La rappresentazione interna di un programma Python vista dall'interprete. Il byte code è anche memorizzato in file .pyc e .pyo così che l'esecuzione dello stesso file sia più veloce in un secondo tempo (la compilazione del sorgente in byte code può essere salvata). Questo ``linguaggio intermedio'' viene eseguito su di una ``macchina virtuale'' che chiama delle corrispondenti subroutine per ogni bytecode.

classe classic
Una classe che non eredita da object. Vedete le classi new-style (NdT: classi di nuovo stile).

coercizione

L'implicita conversione di un'istanza di un tipo in un'altro, durante un'operazione che coinvolge due argomenti dello stesso tipo. Per esempio, int(3.15) converte il numero in virgola mobile in un numero intero, 3; ma in 3+4.5 ogni argomento è di un tipo differente (uno intero ed uno in virgola mobile) ed entrambi dovranno essere convertiti nello stesso tipo prima che siano sommati o che venga sollevata l'eccezione TypeError. La coercizione tra due operandi può essere realizzata con la funzione built-in coerce; quindi 3+4.5 è equivalente a chiamare operator.add(*coerce(3, 4.5)) ed al risultato di operator.add(3.0, 4.5). Senza la coercizione, tutti gli argomenti, anche di tipo compatibile, dovrebbero essere normalizzati allo stesso valore dal programmatore, per esempio float(3)+4.5 piuttosto che 3+4.5.

numeri complessi

Un'estensione del familiare sistema dei numeri reali in cui tutti i numeri vengono espressi come la somma di una parte reale ed una immaginaria. I numeri immaginari sono reali multipli dell'unità immaginaria (la radice quadrata di -1), spesso scritta i in matematica o j in ingegneria. Python ha il supporto built-in per i numeri complessi, che vengono scritti con quest'ultima notazione; la parte immaginaria viene scritta con il suffisso j, ad esempio 3+1j. Per avere accesso alle complesse equivalenza del modulo math, usate cmath. L'uso dei numeri complessi è una funzionalità matematica abbastanza avanzata. Se non ne siete consapevoli o non avete necessità di conoscere l'argomento, potrete quasi certamente ignorarli.

descrittore
Un oggetto di nuovo stile che definisce i metodi __get__(), __set__() o __delete__(). Quando un attributo di classe è un descrittore, esso è uno speciale vincolo comportamentale innescato su di un attributo di consultazione del dizionario. Normalmente, scrive a.b per la consultazione su di un oggetto b nella classe dizionario per a, ma se b è un descrittore, viene chiamato il metodo definito. Per capirsi, un descrittore è una chiave di lettura che porta ad una profonda comprensione di Python poiché è la base per molte funzionalità, incluse funzioni, metodi, proprietà, metodi di classe, metodi statici e riferimenti a super classi.

dizionario
Un array associativo, dove chiavi arbitrarie vengono mappate in valori. L'uso di dict somiglia molto a quello per le liste list, ma le chiavi possono essere ogni oggetto con una funzione __hash__(), non giusto interi che iniziano da zero. Chiamata hash in Perl.

EAFP
È più facile domandare perdono che chiedere il permesso. Questo comune stile di scrivere codice Python assume l'esistenza di chiavi valide o attributi ed eccezioni catturate se si assumono come valide dimostrazioni che poi si dimostrano errate. Questo stile veloce e pulito viene caratterizzato dalla presenza di molte istruzioni try ed except. La tecnica contrasta con lo stile LBYL che è invece comune in molti altri linguaggi come il C.

__future__
Uno pseudo modulo che i programmatori usano per abilitare nuove funzionalità del linguaggio che non sono compatibili con il corrente interprete. Per esempio l'espressione 11/4 correntemente viene valutata come 2. Se il modulo in cui viene eseguito ha abilitato true division per mezzo dell'esecuzione di:

from __future__ import division

l'espressione 11/4 verrà valutata come 2.75. Attraverso l'importazione del modulo __future__ e la valutazione delle variabili, potrete notare come la nuova funzionalità viene prima aggiunta al linguaggio e quindi diventa predefinita:

>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

generatore
Una funzione che restituisce un iteratore. Viene vista come una normale funzione, eccetto per il fatto che valuta e ritorna al chiamante usando un'istruzione yield invece di un'istruzione return. La funzione generatore spesso contiene uno o più cicli for o while che restituiscono al chiamante elementi yield. La funzione viene eseguita e fermata dalla parola chiave yield (che restituisce il risultato) e viene ripresa da quel punto quando il prossimo elemento viene richiesto da una chiamata del metodo next() restituito dall'iteratore.

GIL
Vedete lock globale dell'interprete.

lock globale dell'interprete
Il lock (NdT: blocco) usato da Python nei thread garantisce che solamente un thread possa essere in esecuzione nello stesso momento. Questa semplificazione in Python assicura che non vi siano due processi che accedono contemporaneamente alla medesima area di memoria. L'intero blocco dell'interprete fa sì che sia semplice per l'interprete creare implementazioni multi-thread, al costo di alcuni parallelismi su macchine multiprocessore. In passato è stato compiuto uno sforzo per creare un interprete ``free-threaded'' (NdT: libero di usare i thread) (un blocco dei dati condivisi con sottile granularità), ma che soffre di prestazioni nei casi comuni dove c'è un singolo processore.

IDLE
Un ambiente di sviluppo integrato per Python. IDLE è un editor basilare ed un interprete d'ambiente che viene fornito con la distribuzione standard di Python. Ottimo per i novizi, è anche utile come esempio di codice per coloro che ricercano un'implementazione di un'applicazione GUI moderatamente sofisticata e multi piattaforma.

immutabile
Un oggetto con un valore fissato. Oggetti immutabili sono numeri, stringhe o tuple (ed altri). Simili ad un oggetto che non ha subito alterazioni. Deve essere creato un nuovo oggetto se si vuole memorizzare un valore differente. Giocano un ruolo importante in posti dove un valore costante di hash è necessario. Per esempio come nelle chiavi di un dizionario.

divisione di interi
La divisione matematica ha rinunciato a qualsiasi resto. Per esempio l'espressione 11/4 viene correntemente valutata come 2, in contrasto al 2.75 restituito dalla divisione con numeri in virgola mobile; anche chiamata floor division. Quando vengono divisi due interi il risultato sarà sempre un altro intero (a meno che non venga adottata la divisione floor). Comunque, se uno degli operandi è un altro numero di tipo diverso (simile al float), al risultato verrà applicata una coercizione (vedete coercizione) al tipo comune. Per esempio, un intero diviso un numero in virgola mobile, fornirà un risultato in virgola mobile, possibilmente con frazioni decimali. La divisione di interi può essere forzata usando l'operatore // invece dell'operatore /. Vedete anche __future__.

interattivo
Phython ha un interprete interattivo, che significa che ai vostri tentativi digitati e visti sullo schermo seguiranno direttamente i risultati. Questo accadrà non appena avrete lanciato l'esecuzione di python senza argomenti (possibilmente selezionandolo sul vostro computer dal menu principale). Questo è un modo veramente pratico e potente per verificare ogni nuova idea o ispezionare moduli e package (ricordatevi help(x)).

interpretato
Python è un linguaggio interpretato, in opposizione a quelli compilati. Questo significa che i file possono essere eseguiti direttamente, senza prima creare un eseguibile che debba essere lanciato. I linguaggi interpretati tipicamente hanno un breve ciclo di sviluppo/correzione rispetto ai compilati, sebbene questi programmi siano un po' più lenti nell'esecuzione. Vedete anche interattivo.

iterabile
Un oggetto contenitore capace di restituirvi un membro per volta. Esempi di oggetti iterabili includono i tipi sequenza (simili a list, str e tuple) ed alcuni tipi non-sequenza come dict, file ed oggetti di ogni classe definita con un metodo __iter__() o __getitem__(). Gli iterabili possono essere usati in cicli for ed in molti altri posti dove è necessaria una sequenza (zip(), map(), ...). Quando un oggetto iterabile viene passato ad un argomento di una funzione built-in iter(), restituisce un iteratore per quest'oggetto. Questo iteratore è ottimo per passare insiemi di valori. Quando usate oggetti iterabili, solitamente non è necessaria una chiamata ad iter() od occuparsi con un iteratore del vostro stesso oggetto. L'istruzione for lo farà automaticamente per voi, creando una variabile temporanea senza nome che manterrà l'iteratore per la durata del ciclo. Vedete anche iteratori, sequenze e generatori.

iteratore
Un oggetto rappresenta un flusso di dati. Ripetute chiamate al metodo next() di un iteratore restituiranno elementi successivi nel flusso. Invece, quando non vi saranno più dati disponibili verrà sollevata un'eccezione StopIteration. A questo punto l'oggetto iteratore ha esaurito il proprio compito ed ogni ulteriore chiamata al metodo next() giustamente solleverà nuovamente un'eccezione StopIteration. Gli iteratori richiedono che il metodo __iter__() restituisca un oggetto iteratore, perciò ciascun iteratore è anche iterabile e può essere usato in molti posti dove altri iterabili vengono accettati. Una notevole eccezione è codice che tenti molteplici passaggi di iterazioni. Un oggetto contenitore (simile a list) produce un nuovo iteratore ogni volta che viene passato alla funzione iter() o usato in un ciclo for. Facendo questi tentativi con un iteratore, verrà retituito proprio lo stesso esausto oggetto iteratore del secondo passaggio dell'iterazione, creando all'apparenza un contenitore vuoto.

costruzione di lista
Un modo compatto per processare tutte od un insieme di elementi in una sequenza e restituire una lista con i risultati. result = ["0x%02x" % x for x in range(256) if x % 2 == 0] genera una lista di stringhe contenenti i numeri esadecimali (0x..) che sono pari nell'intervallo da 0 a 255. La clausola if è facoltativa. Se omessa, tutti gli elementi nell'intervallo range(256) vengono, in questo caso, processati.

mappa
Un oggetto contenitore (simile a dict) che supporta la consultazione con chiave arbitraria usando lo speciale metodo __getitem__().

metaclasse
La classe di una classe. La definizione di una classe creata, una classe con nome, una classe dizionario, un elenco delle classi di base. La metaclasse è responsabile per l'accettazione dei tre argomenti e la creazione della classe. Molti linguaggi di programmazione orientati agli oggetti forniscono come predefinita questa implementazione. Ciò che rende Python speciale è la possibilità di creare metaclassi personalizzate. Molti utenti non hanno la necessità di avere questo strumento, ma quando invece si presenta, le metaclassi forniscono un'ottima ed elegante soluzione. Possono essere usate per ottenere attributi di accesso al logging, aggiungere thread-safety, tracciare la creazione di oggetti, implementare singleton ed in molte altre sessioni.

LBYL
Guardatelo prima di non considerarlo. Questo stile di scrittura di codice verifica delle pre-condizioni prima di creare chiamate a consultazioni. Questo stile contrasta con l'approccio EAFP e viene caratterizzato dalla presenza di parecchie istruzioni if.

mutabile
Gli oggetti mutabili possono modificare i loro valori ma mantenere i loro id(). Vedete anche immutabile.

spazio dei nomi
Il luogo dove vengono memorizzate le variabili. Lo spazio dei nomi viene implementato come un dizionario. Questo spazio dei nomi può essere locale, globale o built-in ed anche annidato in un oggetto (nei metodi). Lo spazio dei nomi supporta la modularità per mezzo di una preventiva risoluzione dei conflitti nei nomi. Per istanza, le funzioni __builtin__.open() e os.open() vengono distinte dai loro spazi dei nomi. Gli spazi dei nomi contribuiscono anche ad aumentare la leggibilità e la manutenibilità tramite una realizzazione chiara che viene implementata nei moduli delle funzioni. Per istanza, scrivere random.seed() o itertools.izip() sgombra dagli equivoci su quale sia lo spazio dei nomi delle funzioni implementato rispettivamente dai moduli random e itertools.

area annidata
L'abilità di riferirsi a variabili in una definizione acclusa. Per istanza, una funzione definisce all'interno un'altra funzione che fa riferimento a variabili in un'altra funzione. Notate che l'area annidata lavora solamente per riferimento e non per assegnamento, che verrà comunque scritto nell'area più interna. Per contro, le variabili locali leggono e scrivono nell'area più interna. Allo stesso modo, le variabili globali leggono e scrivono nello spazio dei nomi globale.

classe di nuovo stile
Ogni classe che eredita da object. Questo include tutti i tipi built-in come list e dict. Solamente le classi di nuovo stile possono usare queste novità di Python, funzionalità versatili come __slots__, descrittori, proprietà, __getattribute__(), metodi di classe e metodi statici.

Python3000
Una mitica versione di Python, non consentirà la compatibilità con versioni più vecchie dell'interprete, o meglio, la consentirà con un'interfaccia telepatica. ;-)

__slots__
Una dichiarazione all'interno di classi di nuovo stile che salva memoria tramite uno spazio dove viene inserita una pre-dichiarazione per istanze di attributi ed eliminazione di istanze di dizionari. Sebbene sia popolare, questa tecnica viene piuttosto usata per prendere il giusto spazio di memoria e riservarlo per i rari casi dove vi sono un grande numero di istanze in applicazioni critiche per la memoria.

sequenza
Un iterabile che supporta efficientemente l'accesso ad elementi usando indici interi tramite gli speciali metodi __getitem__() e __len__(). Alcuni tipi di sequenze built-in sono list, str, tuple ed unicode. Notate che dict supporta anche __getitem__() e __len__(), ma è considerato una mappa piuttosto che una sequenza poiché la consultazione usa chiavi arbitrarie immutabili piuttosto che interi.

Lo Zen di Python
L'elenco principale del disegno di progettazione e della filosofia che può essere utile alla comprensione ed all'uso del linguaggio. L'elenco può essere rinvenuto digitando al prompt interattivo ``import this''.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.