• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Perl32

Utente Medio
Autore del topic
22 Febbraio 2010
237
0
Miglior risposta
0
IL PYTHON​
Il Python è un linguaggio di programmazione ad alto livello interpretato, orientato agli oggetti, adatto, tra gli altri usi, per sviluppare applicazioni distribuite, scripting, computazione numerica e system testing. Python è spesso paragonato a Tcl, Perl, Java, JavaScript, Visual Basic o Scheme. Ideato da Guido van Rossum all'inizio degli anni novanta, Python prende il nome dalla serie televisiva Monty Python's Flying Circus.

FILOSOFIA
Python è un linguaggio multi-paradigma, infatti permette in modo agevole di scrivere programmi seguendo il paradigma object oriented, la programmazione strutturata oppure la programmazione funzionale. Il controllo dei tipi è forte (strong typing) e viene eseguito al runtime (dynamic typing). In altre parole una variabile non è altro che un contenitore (che nella sua storia può assumere valori sempre dello stesso tipo) al quale viene associata un'etichetta (il nome) che, durante l'esecuzione del programma (runtime), può essere spostata e associata a diversi contenitori anche di tipo diverso. 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 Perl spesso è classificato come 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.

TIPI DI DATI E SCRITTURE
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 una sola 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 (come avviene in Java).

Essendo 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 al momento del 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 in PHP).

CONTENITORI
Python ha una serie di tipi contenitori come ad esempio liste, tuple e "dizionari". Essi 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 l'istruzione seguente crea un un sito A, composto da due elementi, le cui chiavi sono "espire" e "forum":
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Le chiavi sono immutabili, mentre il valore corrispondente è variabile tramite un'assegnazione. La seguente istruzione modifica il valore corrispondente a "espire", portandolo a 450000:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

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 e perfino gli interi. È inoltre supportata l'ereditarietà multipla.

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.

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" (gira) sugli elementi di una lista o su di un iteratore (equivalente al 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 until in stile Perl, ma tutti questi possono essere espressi con dei semplici equivalenti. Allo stesso modo ha solamente il costrutto if…elif…else per le scelte condizionate, ma non switch oppure goto.

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 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 un numero arbitrario di spazi bianchi, ma lo standard Python è di 4 spazi bianchi). L'esempio che segue chiarisce questo aspetto; sono mostrate la versione C e Python di funzioni per il calcolo del fattoriale di un intero.
FATTORIALE IN C
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
FATTORIALE IN PYTHON
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
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.

PROGRAMMAZIONE FUNZIONALE
Come detto sopra, un altro punto di forza di 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:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Dal momento che Python permette di avere funzioni come argomenti, è anche possibile avere costrutti funzionali più sottili, come ad esempio la continuation[3].

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:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

GESTIONE DELLE ECCEZIONI
Python supporta e usa estensivamente la gestione delle eccezioni come un mezzo per controllare la presenza di eventuali condizioni di errore, incluse le eccezioni generate dagli errori di sintassi.

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 restituiti 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.

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 ve 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.

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.

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, visualizzando immediatamente il risultato.

L'interprete è inoltre contenuto nella libreria standard e come in molti altri linguaggi interpretati è possibile far 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.

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. Con opportune accortezze e utilizzando solo moduli standard, in alcuni casi può raggiungere una velocità di esecuzione pari ad un codice equivalente in C, grazie ad una serie di ottimizzazioni interne della PVM.

ALTRE IMPLEMENTAZIONI
Sono attualmente disponibili le seguenti implementazioni di Python:

* Jython, in linguaggio Java;
* IronPython, per la piattaforma Microsoft .NET;
* Python for S60, per i dispositivi con sistema operativo Symbian;
* PyPy: scritta in Python stesso. Ha tra i principali obiettivi la semplificazione dello sviluppo del linguaggio e la sua ottimizzazione in termini prestazionali

Adesso come sempre nelle mie release si passa dalla teoria alla pratica ^^

Introdurremo le particolari istruzioni di controllo del flusso tipiche di Python.

IDENTAZIONE​
In principio c'era il GOTO, il comando di controllo del flusso esplicito, che tendeva a trasformare i programmi in un ammasso di spaghetti. Da molto tempo è stato abolito nella programmazione, sostituito dalla programmazione strutturata. Questo significa che i programmi vengono strutturati a blocchi. Ovvero, se ho una istruzione che effettua un calcolo, e voglio seguire questo calcolo 10 volte, inserisco il blocco di istruzioni che effettuano il calcolo in un blocco controllato da una istruzione esterna che controlla il blocco.

Per esempio se voglio scrivere un programma che stampa i numeri dispari da 1 a 10 posso fare qualcosa del genere:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Notare che dopo il while e l'if (che sono comandi strutturati, come vedremo in dettaglio più avanti) c'è una condizione. Questa condizione non deve essere necessariamente tra parentesi (come in C), ma deve essere terminata da un "due punti". Il blocco è nelle righe seguenti, più indentate rispetto al comando stesso. In realtà è possibile mettere un singolo comando immediatamente dopo i "due punti" , per cui si sarebbe anche potuto scrivere: if i%2==1: print i. Ma in realtà il codice più chiaro è quello scritto con l'annidamento.

Se conosce il Pascal , noterete immediatamente la particolare caratteristica del Python: l'uso delle indentazioni per descrivere (e non per evidenziare) l'annidamento di comandi. Lo stesso programma per esempio in un linguaggio come il Pascal si sarebbe potuto scrivere come segue:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
So benissimo che la maggior parte di voi che conoscono programmazione avranno visto inorriditi come non ho assolutamente rispettato le usuali regole di annidamento; regole che servono a rendere un programma leggibile; infatti l'ho fatto apposta. Il fatto è che in Pascal ci sono le parole chiave begin ed end a organizzare realmente la struttura di un programma. Invece in Python è proprio l'indentazione stessa a descrivere la struttura del programma.

Questa caratteristica può essere amata o odiata. In ogni caso, occorre un editore testi abbastanza intelligente per poterci lavorare senza troppe difficoltà. Per esempio usando emacs o l'ambientino di sviluppo incluso in Python stesso, IDLE, si lavora con sufficiente agilità. Ma io per esempio trovo quasi impossibile scrivere programmi Python usando vi.

Un altro problema ricorrente è la confusione che si genera quando in un testo sono presenti dei caratteri di tabulazione. Ricordo che il carattere TAB viene espando in una sequenza di spazi, che normalmente sono 8, ma possono in realtà essere variati configurando l'editore testi stesso.

Il che comporta una possibilità di confusione quando viene mischiato senza ritegno all'uso di spazi e tab. Un problema frequente è che un testo perfettamente leggibile in Python con un certo editor diventa incomprensibile con un altro che utilizza una diversa dimensione delle tabulazioni. Il consiglio che posso dare è di usare sempre spazi invece di tabulazioni, ed in non esagerare in larghezza in quanto l'indentazione dei programmi Python può diventare facilmente piuttosto profonda.

C'è una eccezione alla regola dell'annidamento: quando viene aperta una parentesi (tipicamente quando si scrivono strutture dati come liste o tuple nel corpo del codice), l'annidamento viene disattivato fino a che non viene chiusa la parentesi.

IF​
Il principale comando di controllo del flusso è il classico if. Semplicemente esegue il blocco che lo segue se la condizione di controllo è vera. C'è da dire qualcosa sulle condizioni che vengono considerate vere. In pratica in Python ci sono numerose strutture dati, le abbiamo viste una volta precedente.

Per ogni struttura dati, esiste un valore che viene considerato falso altrimenti l'espressione viene considerata vera. In particolare il valore numerico 0 viene considerato falso, mentre un valore non zero viene considerato vero. Una sequenza vuota viene considerata falsa, mentre una sequenza che contiene qualcosa viene considerata vera. Una conseguenze è che, per esempio, una stringa vuota o una lista vuota sono false, mentre se contengono caratteri o elementi sono vere. Infine per quanto riguarda gli oggetti (che cominceremo a vedere la prossima volta), il particolare valore None (che indica l'oggetto nullo) è falso, mentre un oggetto in generale è un valore considerato vero.

Una cosa importante notare è come le condizioni vengono concatenate. Innanzitutto l'if ammette la clausola else, che viene eseguita quando una condizione non è vera. Poi è possibile concatenare una sequenza di "if" in cascata utilizzando la clausola "elif". Questa clausola è praticamente necessaria per evitare che una catena di if creino una struttura annidata molto profonda. Facciamo un esempio:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Fare attenzione che l'operatore di confronto è "==", che e diverso dall'operatore "=" che significa assegnamento.

WHILE​
Il comando while serve a iterare un blocco di codice finché non è vera la condizione di controllo. Si tratta del più classico dei comandi di programmazione strutturata. Il ciclo può essere interrotto utilizzando il comando break. Inoltre può succedere che si voglia passare l'iterazione successiva del ciclo saltando il resto del blocco. In questo caso si utilizza il comando continue.

Nel seguente esempio scriviamo un programma che calcola una somma dei numeri dispari, e che fa uso di break e continue,
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

[/I]
il meccanismo è quello di ripetere all'infinito un blocco di comandi. Quando la variabile di controllo supera il massimo, il ciclo viene interrotto. Quando le variabili di controllo ha un valore pari, il ciclo ricomincia con l'iterazione successiva.

FOR​
I comandi che abbiamo visto prima sono tipici di altri linguaggi di programmazione. L'unica cosa particolare è la sintassi specifica di Python. È del tutto specifico di Python il ciclo for. Questo particolare costrutto tende a variare dal linguaggio a linguaggio, a seconda delle strutture dati utilizzate in esso. La caratteristica di Python è quella di ciclare sulle sequenze. In particolare data una sequenza,che sia una stringa o una lista, il ciclo effettua una iterazione per ogni elemento. Per esempio consideriamo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Il risultato è che vengono stampate le tre stringhe della lista.

La domanda che sorge spontanea a questo punto, è: come si fa a fare un ciclo numerico banale come quello da 1 a 10? Una risposta potrebbe essere quella di utilizzare il ciclo while. La logica del Python vuole che sia un solo modo per far le cose (esattamente al contrario del Perl), e quindi in generale queste è la via preferenziale. Comunque abbiamo un'altra opzione, che è quella di generare una lista dei numeri da 1 a 10, e di iterare su di essa. Questo si ottiene con la funzione range:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
La funzione range(10) crea una lista i numeri da 0 a 9; infatti il limite inferiore è zero per default, mentre il numero specificato è il limite superiore, che non viene raggiunto. Se si vuole ottenere una lista che vada da 1 a 10 si deve utilizzare range(1,11): estremo inferiore incluso, estremo superiore escluso.

Quando si fa così occorre fare attenzione che si possono ottemere della lista molto grandi che occupano memoria. Esiste una funzione chiamata xrange(), che invece ritorna un "generatore di numeri". Tecnicamente è un oggetto che si comporta come una sequenza. Utilizzando questo oggetto si occupa meno memoria, anche se è leggermente più lento. Probabilmente conviene utilizzare nella maggior parte dei casi range, ricorrendo alla xrange quando si devono eseguire cicli molto lunghi.

Quando vogliamo possiamo iterare non solo su liste ma anche su tabelle: ovvero le hash map. Però occorre selezionare le chiavi, e accedere a ciascun elemento usandola chiave, come segue (spiegheremo il "%" in seguito):
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Un altro modo di iterare è quello di "snocciolare" gli elementi di una hash map. Utilizzando la funzione items() si ottengono tutti gli elementi della hash map come una lista di tuple:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Come si nota si può usare come variabile di controllo una tupla, e il meccanismo è lo stesso dell'appplicane del principio.

Logo:
python-logo1.jpg


E con questo ho spiegato solo le cose più importanti del python :emoji_slight_smile:
Spero vi sia stata di aiuto ^^

Alla prossima release PΣЯL32 ^^

Fonte :
Perfavore, Entra oppure Registrati per vedere i Link!

Perfavore, Entra oppure Registrati per vedere i Link!

Perfavore, Entra oppure Registrati per vedere i Link!


 
Ultima modifica da un moderatore:
Prego indica la Fonte Precisa secondo quanto c'è scritto nel Regolamento ;)
 
Prego indica la Fonte Precisa secondo quanto c'è scritto nel Regolamento ;)

Manu la guida è creata da me , ho preso varie parti da vari siti e mettendole insieme ci ho creato una guida sulla PARTE BASE DEL PYTHON ^^