Web - Amazon

We provide Linux to the World

ON AMAZON:


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Python - Wikipedia

Python

Da Wikipedia, l'enciclopedia libera.

bussola Nota disambigua – Se stai cercando il genere di serpenti con il nome scientifico python, vedi python (zoologia).
Immagine:python-logo.gif
Python
Sviluppatore Guido van Rossum
Ultima versione 2.5.2 / 21 febbraio 2008
Ultima beta 3.0 alpha 4 / 02 aprile 2008
SO multi-piattaforma
Genere Linguaggio di programmazione
Licenza software libero
Sito web www.python.org
Il vecchio logo del linguaggio Python
Il vecchio logo del linguaggio Python

Python è un potente linguaggio di programmazione interpretato creato da Guido van Rossum. Prende il nome dalla serie televisiva Monty Python's Flying Circus.

Indice

[modifica] Filosofia

Python è un linguaggio multi-paradigma. Infatti permette in modo agevole di scrivere programmi seguendo il paradigma object oriented, oppure la programmazione strutturata, oppure la programmazione funzionale. Il controllo dei tipi è forte (strong typing) e viene eseguito runtime (dynamic typing). In altre parole una variabile può assumere nella sua storia valori di tipo diverso, tuttavia in ogni istante appartiene ad un tipo ben definito. Usa un garbage collector per la gestione automatica della memoria.

Python ha qualche similarità con Perl, ma i suoi progettisti hanno scelto la via di una sintassi più essenziale e uniforme, con l'obiettivo di aumentare la leggibilità del codice. Come il Perl spesso è classificato linguaggio di scripting, ma pur essendo utile per scrivere script di sistema (in alternativa ad esempio a bash), la grande quantità di librerie disponibili e la facilità con cui questo linguaggio permette di scrivere software modulare favoriscono anche lo sviluppo di applicazioni molto complesse.

[modifica] Tipi di dati e strutture

Python ha un gran numero di tipi base. Oltre ai tipi interi e floating point classici, supporta in modo trasparente numeri interi arbitrariamente grandi e numeri complessi. Dalla versione 2.4 sono disponibili anche i numeri decimali (decimal), ovvero numeri con la virgola a precisione illimitata, come quelli disponibili in Rexx o in Cobol, che non soffrono di problemi di arrotondamento e stabilità tipici dei numeri floating point classici.

Supporta tutte le operazioni classiche sulle stringhe con questa eccezione: le stringhe in Python sono oggetti immutabili, cosicché qualsiasi operazione che in qualche modo potrebbe alterare una stringa (come ad esempio la sostituzione di un carattere) restituirà invece una nuova stringa.

Essendo il Python a tipizzazione dinamica, tutte le variabili sono in realtà semplici puntatori ad oggetto (reference), sono gli oggetti invece ad essere dotati di tipo. Ad esempio ad una variabile cui era assegnato un intero, un istante dopo può essere assegnata una stringa o un array.

In Python c'è un moderato controllo dei tipi a runtime. Si ha conversione implicita per i tipi numerici, per cui si può ad esempio moltiplicare un numero complesso per un intero, ma non c'è ad esempio conversione implicita tra numeri e stringhe, per cui un numero è un argomento non valido per le operazioni su stringa (come avviene ad esempio in PHP).

[modifica] Contenitori standard

Python ha una serie di tipi contenitori come ad esempio liste, tuple e dizionari. Liste, tuple e dizionari sono sequenze e condividono la maggior parte dei metodi. Le liste sono array estendibili, invece le tuple sono array immutabili di lunghezza prefissata.

Altri contenitori di grande utilità sono i dizionari, conosciuti in altri contesti con il nome di hash table oppure array associativi. Gli elementi dei dizionari sono composti da una coppia di dati separati da due punti ':'. Il primo elemento della coppia rappresenta l' indice (detto 'chiave') mentre il secondo è il suo valore corrispondente. Ogni elemento è detto coppia chiave-valore.

Per esempio:

A = {'wikipedia': '400000', 'wikiquote': '6000'}

Questa istruzione crea un dizionario A, composto da due elementi. Le chiavi sono: "wikipedia" e "wikiquote". Le chiavi sono immutabili, mentre il valore corrispondente è variabile tramite un'assegnazione.

A['wikipedia'] = '450000'

Dopo questa istruzione il valore corrispondente a "wikipedia" è diventato 450000.

[modifica] Organizzazione ad oggetti

Il sistema dei tipi Python è ben integrato con il sistema delle classi. Anche se i tipi base non sono precisamente classi, una classe può ereditare da essi. In questo modo è possibile estendere stringhe, dizionari, ... o perfino gli interi. L'ereditarietà multipla è supportata.

Vengono supportate anche funzionalità estensive di introspezione sui tipi e sulle classi. I tipi e le classi sono a loro volta oggetti che possono essere esplorati e confrontati. Gli attributi sono gestiti in un dizionario.

[modifica] Sintassi

Python è stato progettato in modo da essere altamente leggibile. Visivamente si presenta in modo molto semplice e ha pochi costrutti sintattici rispetto a molti altri linguaggi strutturati come C, Perl o Pascal.

Per esempio, Python ha solo due forme di ciclo: for che cicla sugli elementi di una lista o su di un iteratore (come il foreach del Perl) e while che cicla fin tanto che l'espressione booleana indicata risulterà vera. In sostanza manca dei cicli in stile C for, do...while, oppure di un until in stile Perl, ma tutti questi naturalmente possono essere espressi con dei semplici equivalenti. Allo stesso modo ha solamente il costrutto if...elif...else per le scelte condizionate, ma niente switch oppure goto.

[modifica] Uso degli spazi

Un aspetto inusuale del Python è il metodo che usa per delimitare i blocchi di programma, che lo rende unico fra i linguaggi più diffusi.

Nei linguaggi derivati dall'Algol -- come ad esempio Pascal, C e Perl -- i blocchi di codice sono indicati con le parentesi oppure con parole chiave (il C ed il Perl usano { }; il Pascal usa begin ed end). In questi linguaggi è solo una convenzione degli sviluppatori il fatto di indentare il codice interno ad un blocco, per metterlo in evidenza rispetto al codice circostante.

Python, invece, deriva il suo sistema di indentazione dal meno noto linguaggio di programmazione Occam: invece di usare parentesi o parole chiave, usa l'indentazione stessa per indicare i blocchi nidificati (si può usare sia una tabulazione, sia n spazi bianchi, ma lo standard Python è 4 spazi bianchi). L'esempio che segue chiarisce questo aspetto. Sono mostrate la versione C e Python di funzioni che fanno la stessa cosa: il calcolo del fattoriale di un intero.

Fattoriale in C:

int fattoriale(int x) {      
    if (x == 0) {                      
        return 1;                   
    } else {
        return x * fattoriale(x-1);
    }
}

Fattoriale in Python:

def fattoriale(x):
    if x == 0:
        return 1
    else:
        return x * fattoriale(x-1)

All'inizio questo modo di indicare i blocchi può confondere le idee a chi viene da altri linguaggi, ma poi si rivela molto vantaggioso, perché risulta molto conciso e obbliga a scrivere sorgenti indentati correttamente, aumentando alquanto la leggibilità del codice. Lo svantaggio è che la gestione degli spazi e dei caratteri di tabulazione può essere diversa da un editor all'altro, il che costringe a fare attenzione nell'indentare il codice, oppure ad affidarsi alle funzioni di indentazione automatica ormai presenti nella maggior parte degli editor di programmi.

[modifica] Programmazione funzionale

Come detto sopra, un altro punto di forza del Python è la disponibilità di elementi che facilitano la programmazione funzionale. Come ci si può aspettare, questo rende ancora più comodo operare con liste o altri tipi contenitore. Uno di questi costrutti è stato preso dal linguaggio funzionale Haskell e consente il "riempimento" di una lista, come possiamo vedere nel seguente esempio in cui vengono calcolate le prime cinque potenze di due:

numeri = [1, 2, 3, 4, 5]
potenze_di_due = [ 2 ** n for n in numeri ]

Dal momento che Python permette di avere funzioni come argomenti, è anche possibile avere costrutti funzionali più sottili, come ad esempio la continuation.

In Python esiste la parola chiave lambda, ma i blocchi lambda possono contenere solo espressioni, non statement. Non sono quindi il modo più generale per restituire una funzione. Si può usare invece la seguente tecnica, che restituisce una funzione il cui nome è definito in uno scope locale, ovvero una closure:

def add_and_print_maker(x):
    def temp(y):
        print "%d + %d = %d" % (x, y, x+y)
    return temp

[modifica] Gestione delle eccezioni

Python supporta e usa estensivamente la gestione delle eccezioni come un mezzo per controllare la presenza di eventuali condizioni di errore. Addirittura è possibile intercettare l'eccezione generata da un errore di sintassi (syntax error)!

Le eccezioni permettono un controllo degli errori più conciso ed affidabile rispetto a molti altri modi possibili usati in genere per segnalare errori o situazioni anomale. Le eccezioni sono thread-safe; non sovraccaricano il codice sorgente come fanno invece i controlli sui valori di errore ritornati, e inoltre possono facilmente propagarsi verso l'alto nello stack delle chiamate a funzione quando un errore deve venire segnalato ad un livello più alto del programma.

Spesso, invece che fare controlli preventivi, si esegue direttamente l'azione desiderata e si catturano le eventuali eccezioni che si possono verificare.

[modifica] Libreria standard

Python ha una vasta libreria standard, il che lo rende adatto a molti impieghi. Oltre ai moduli della libreria standard se ne possono aggiungere altri scritti in C oppure Python per soddisfare le proprie esigenze particolari. Tra i moduli già disponibili ce ne sono per scrivere applicazioni web (sono supportati MIME, HTTP e tutti gli altri standard internet). Sono disponibili anche moduli per creare applicazioni con interfaccia grafica, per connettersi a database relazionali, per usare le espressioni regolari e per fare molte altre cose.

La libreria standard è uno dei punti forti di Python. Essa infatti è compatibile con tutte le piattaforme, ad eccezione di poche funzioni, segnalate chiaramente nella documentazione come specifiche di una piattaforma particolare. Grazie a questo generalmente anche programmi Python molto grossi possono funzionare su Linux, Mac, Microsoft Windows e altre piattaforme senza dover essere modificati.

[modifica] Altre caratteristiche

Come il Lisp e a differenza del Perl, l'interprete Python supporta anche un modo d'uso interattivo attraverso il quale è possibile inserire codice direttamente da un terminale, vedendo immediatamente il risultato. Questo è un bel vantaggio per chi sta imparando il linguaggio, ma anche per gli sviluppatori esperti: brevi tratti di codice possono essere provati in modo interattivo prima di essere integrati nel programma principale.

L'interprete è inoltre contenuto nella libreria standard, e come in molti altri linguaggi interpretati è possibile fargli valutare stringhe arbitrarie nel contesto corrente. È però possibile passare all'interprete anche un contesto completamente diverso, sotto forma di liste che contengono l'elenco dei simboli definiti.

Python dispone anche di un framework per lo unit testing che permette di creare serie esaustive di test.

[modifica] Prestazioni

Se paragonato ai linguaggi compilati statically typed, come ad esempio il C, la velocità di esecuzione non è uno dei punti di forza di Python, specie nel calcolo matematico. Esiste un'estensione, Psyco, che è una sorta di compilatore JIT e permette di velocizzare in modo notevole alcuni tipi di codice, specialmente l'implementazione di algoritmi, pur pagando un prezzo in termini di memoria utilizzata. Comunque, anche in questo modo un qualunque compito che preveda numerosi calcoli puri non è adatto ad un programma Python.

Le performance di Python sono invece allineate o addirittura superiori ad altri linguaggi interpretati, quali PHP e Ruby, e in certe condizioni può rivaleggiare anche con Java. Non va inoltre dimenticato che Python permette di aggirare in modo facile l'ostacolo delle performance pure: è infatti relativamente semplice scrivere un'estensione in C o C++ e poi utilizzarla all'interno di Python, sfruttando così l'elevata velocità di un linguaggio compilato solo nelle parti in cui effettivamente serve, e sfruttando invece la potenza e versatilità di Python per tutto il resto del software.

[modifica] Altre implementazioni

  • Jython è un'implementazione '100% pure Java' di Python.
  • IronPython è un'implementazione per la piattaforma Microsoft .NET di Python.
  • Python for S60 è un'implementazione per i dispositivi con sistema operativo Symbian di Python.
  • PyPy è un'implementazione di Python scritta in Python stesso, e ha tra i principali obiettivi la semplificazione dello sviluppo del linguaggio e la sua ottimizzazione in termini prestazionali. La versione attuale è la 1.0.0 (rilasciata il 27 marzo 2007).

[modifica] Esempio di programma

[modifica] Hello, world!

Il seguente esempio di programma Python stampa il testo "Hello, world!".

print "Hello, World!"

Versione 'breve' (funzionante solo da sessione interattiva):

"Hello, World!"

Versione Easter egg:

import __hello__
import __phello__

[modifica] Altri progetti

[modifica] Collegamenti esterni

Principali linguaggi di programmazione (tutti)

Ada | ALGOL | APL | Awk | BASIC | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Haskell | IDL | Java | JavaScript | J# | Lisp | LOGO | ML | Objective C | O'Caml | Pascal | Perl | PHP | PL/I | PLaSM | Prolog | Python | Ruby | SAS | Scheme | sh | Simula | Smalltalk | SQL | Transact-SQL | Visual Basic

Static Wikipedia 2008 (March - no images)

aa - ab - als - am - an - ang - ar - arc - as - bar - bat_smg - bi - bug - bxr - cho - co - cr - csb - cv - cy - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - jbo - jv - ka - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nn - -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -
https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformativo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com