Python

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Disambiguazione– Se stai cercando altri significati, vediPython (disambigua).
Python
linguaggio di programmazione
AutorePython Software Foundation eGuido van Rossum
Data di origine20 febbraio 1991
Ultima versione3.13.0 (7 ottobre 2024)
Utilizzogeneral-purpose,scripting
Paradigmiprogrammazione funzionale,programmazione orientata agli oggetti,programmazione dinamica,programmazione imperativae programmazione multi-paradigma
Tipizzazionedinamica
Influenzato daALGOL 68,ABC,Modula-3,C,C++,Perl,Materia:Java,Lisp,Haskell,APL,CLU,Dylan,IconeStandard ML
Ha influenzatoBoo,Cobra,CoffeeScript,D,F#,Go,Groovy,JavaScript,Julia,Ruby,Swift
Implementazione di riferimento
Sistema operativoMultipiattaforma
LicenzaPython Software Foundation License
Sito webPython.org/

Pythonè unlinguaggio di programmazione ad alto livello,orientato a oggetti,adatto, tra gli altri usi, a sviluppareapplicazionidistribuite,scripting,computazione numericaesystem testing.

Ideato dall'olandeseGuido van Rossumall'inizio deglianni novanta,è spesso paragonato aRuby,Tcl,Perl,JavaScript,Visual BasicoScheme[1].Il nome fu scelto per la passione dello stesso inventore verso iMonty Pythone per la loro serie televisivaMonty Python's Flying Circus[2].

Spesso è tra i primilinguaggi di programmazionead essere studiati dai neofiti, per la sua somiglianza a unopseudo-codice,e di frequente viene usato per simulare la creazione di software grazie alla flessibilità di sperimentazione consentita, che permette al programmatore di organizzare le idee durante lo sviluppo, come per esempio il creare un gioco tramitePygameoppure ilback-enddi un sito web tramiteFlaskoDjango.

Python dispone anche di una sezione grafica, il moduloPython Turtle Graphics,che permette di applicare le righe di codici alla grafica.

È un linguaggio che ha tra i principali obiettivi:dinamicità,semplicità e flessibilità[non chiaro]. Supporta multipliparadigmi di programmazione,tra cui quelloa oggettie quellofunzionale.

Le caratteristiche più immediatamente riconoscibili di Python sono levariabilinon tipizzate e l'uso dell'indentazione per la sintassi delle specifiche, al posto delle più comuni parentesi.

Altre caratteristiche distintive sono l'overloadingdi operatori e funzioni tramitedelegati,la presenza di un ricco assortimento di tipi e funzioni di base e librerie standard, sintassi avanzate qualislicingelist comprehension.

Il controllo dei tipi è forte (strong typing) e viene eseguito aruntime(dynamic typing): una variabile è un contenitore a cui viene associata un'etichetta (il nome) che può essere associata a diversi contenitori anche di tipo diverso durante il suo tempo di vita. Fa parte di Python un sistemagarbage collectorper liberazione e recupero automatico della memoria di lavoro.

Python ha qualche somiglianza conPerl,ma i suoi progettisti hanno scelto una sintassi più essenziale e uniforme con l'obiettivo di migliorare la leggibilità del codice. Analogamente a Perl è classificato spesso comelinguaggio di scripting,ma pur essendo utile per scriverescriptdi sistema, in alternativa per esempio abash,la grande quantità di librerie disponibili e la facilità con cui il linguaggio permette di scrivere software modulare favoriscono anche lo sviluppo di applicazioni molto complesse.

Altre caratteristiche

[modifica|modifica wikitesto]
Codice sorgentedi un programma scritto in Python
Esempio di codice sorgente scritto in Python

Sebbene Python venga in genere considerato e presentato come unlinguaggio interpretato,in realtà ilcodice sorgentenon viene convertito direttamente inlinguaggio macchina,ma passa prima da una fase di pre-compilazione inbytecode,che viene quasi sempre riutilizzato dopo la prima esecuzione del programma, evitando così di dover reinterpretare ogni volta il sorgente e migliorando le prestazioni. Inoltre è possibile distribuire programmi Python direttamente in bytecode, saltando totalmente la fase di interpretazione da parte dell'utilizzatore finale e ottenendo programmi Python a sorgente chiuso[3].

Menù a tendinadal quale si può eseguire il programma cliccando su "Run Module" o con lo shortcut F5 dawindows 10in poi.

Come il linguaggioLispe a differenza del Perl, l'interpretePython supporta anche un modo d'uso interattivo (REPL) attraverso cui è possibile inserire codice direttamente da un terminale, visualizzando immediatamente il risultato.

Esempio di alcunicodici sorgentescritti con l'IDLEdi Python 3.8.5

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

Python dispone anche di unframeworkper lounit testingche supporta lo sviluppo di test unitari automatici.

Se paragonato ai linguaggi compilatistatically typed,come ad esempio ilC,la velocità di esecuzione non è uno dei punti di forza di Python[4],specie nel calcolo matematico. Inoltre, il programma si basa unicamente su un core, ed il multi-threading è presente al solo livello astratto. Esisteva un'estensione,Psyco[5],il cui sviluppo è terminato nel 2012, che era una sorta dicompilatore JIT,in grado di velocizzare in modo notevole alcuni tipi di codice, specialmente l'implementazione di algoritmi, a scapito dell'aumento di memoria utilizzata. Un progetto attuale e attivamente sviluppato per migliorare le prestazioni del codice Python grazie a uncompilatore JITèPyPy[6].

Python permette di aggirare in modo facile l'ostacolo delle performance pure: è infatti relativamente semplice scrivere un'estensione inCoC++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[7].

Implementazioni

[modifica|modifica wikitesto]
  • CPython:è l'implementazione di riferimento del linguaggio Python. Scritto inCe Python, è l'implementazione più usata in assoluto;[8]
  • Jython:implementazione basata suJava;[9]
  • IronPython:implementazioneC#pensata per l'integrazione con l'ecosistema.NET;[10]
  • PyS60: implementazione perSymbian OS;[11]
  • PyPy:scritto in Python stesso. Ha tra i principali obiettivi la semplificazione dello sviluppo del linguaggio e la sua ottimizzazione in termini prestazionali[12];

Tipi di dati e strutture

[modifica|modifica wikitesto]

Essendo Python atipizzazione dinamica,tutte le variabili sono, in realtà,puntatoriaoggetto.Per esempio, se a una variabile è assegnato un valore numerico intero, subito dopo può essere assegnata una stringa o una lista. Gli oggetti sono invece dotati di tipo.

Python prevede un moderato controllo dei tipi al momento dell'esecuzione, ovveroruntime.I tipi numerici godono di conversione implicita, perciò è possibile, per esempio, moltiplicare unnumero complessoper un intero. Non esiste invece conversione implicita tra numeri e stringhe alfanumeriche, perciò un numero è un argomento non valido per le operazioni su stringhe, a differenza di quanto avviene per esempio in linguaggioPHP.

Python dispone di vari modelli/librerie da utilizzare per fornire funzionalità senza dovere scrivere codice, come per esempio il moduloturtle graphics[13](per disegnare),copy[14](per creare copie dioggetti),random[15](per generare numeri casuali),sys[16](per interagire da riga di comandi con l'interprete) etime(per operare con unità di tempo e date).

Python mette a disposizione un gran numero ditipi base,essenzialmente numerici e contenitori. Caratteristica distintiva è il supporto nativo, oltre che ai classici tipi quali interi,floating point(numeri con virgola mobile) e stringhe alfanumeriche, anche a tipi più evoluti quali interi a grandezza arbitraria, numeri complessi,liste,insiemi edizionari.Non è invece previsto un tipo specifico per i caratteri.

Molti altri tipi sono importabili da librerie standard e nuovi tipi possono essere creati attraverso leclassi.

Turtle Graphics

[modifica|modifica wikitesto]
Esempio di output di un programma scritto con la libreria turtle.

Il modulo turtle, come le altre librerie, è importabile con l'apposita funzioneImport,scrivendo nel codice sorgente:

importturtle
fromturtleimportTurtle,Screen

I comandi scritti sopra rendono disponibili gli oggetti Turtle e Screen, le cui funzioni possono essere assegnate a degli oggetti veri e propri come di seguito:

fromturtleimportTurtle,Screen#così si importano una turtle (la penna di Python ) e il rispettivo schermo.
Sfondo=Screen()#così si assegna a Sfondo ogni funzione e proprietà di Screen.
Penna=Turtle()#questa sarà la Penna.
#naturalmente ogni nome di oggetto può essere assegnato alla turtle e allo screen e modificato nel corso del programma.

Tutte le funzioni dello sfondo e della penna possono essere usate richiamandole come nel codice sotto:

Penna.circle(5)#ad esempio la funzione circle creerà un cerchio che abbia come raggio il valore tra parentesi
#la funzione setcolor (sia riferita alla turtle che allo sfondo) ne determina il colore
Sfondo.setcolor("orange")#utilizzando il nome del colore desiderato
Sfondo.setcolor("FFFFFF")#o scrivendo in RGB esadecimale il colore in questione

I tipiinteri(int) efloating point(float) hanno una dimensione dipendente dall'hardware e dall'implementazione dell'interprete, in genere 32 e 64bit.Sono previsti, in modo nativo, numeri interi arbitrariamente grandi (long,che diventano l'opzione di default per gli interi a partire da Python 3.0) e numeri complessi (complex).

Python prevede tutti i principali operatori logici e aritmetici fra numeri, compreso l'elevamento a potenza. Il tipo booleano (bool) appartiene anch'esso alla categoria dei numeri.

Dalla versione 2.4 di Python sono disponibili come libreria[17]anche i numeri decimali (decimal), ossia numeri in virgola mobile con precisione illimitata, come quelli disponibili inREXXo inCobol,che non soffrono di problemi di arrotondamento e stabilità tipici dei numerifloating pointclassici.

Python considera in generale comecontenitorigli oggetti che prevedono la possibilità di iterare su un insieme di elementi, perciò utilizzabili all'interno di contesti quali il ciclofore funzioni quali somma, ricerca e ordinamento. I contenitori in genere permettono di contenere dati di tipo eterogeneo.

Per quanto riguarda i contenitori standard propriamente detti, sono classificabili comesequenze,insiemiedizionari.I contenitori seguono una filosofia comune e condividono gran parte deimetodi.

Lesequenzesono contenitori ordinati, che condividono metodi basati sull'ordinamento, l'indicizzazione intera e la creazione di sottosequenze tramiteslicing.

Leliste(list) sono sequenze estendibili, mentre letuple(tuple) sono sequenze immutabili. Anche lestringhealfanumeriche (streunicode) sono considerate sequenze. A partire da Python 3.0, i tipistreunicodesono unificati e compare il tipobyte,equivalente grosso modo a una stringa binaria.

Sono previste tutte le operazioni classiche sulle stringhe come concatenamento, formattazione, ricerca, sostituzione e così via. Le stringhe in Python sono sequenze immutabili, cosicché qualsiasi operazione che in qualche modo potrebbe alterare una stringa, per esempio la sostituzione di un carattere, restituisce in effetti una nuova stringa, come avviene in Java e inC#.

Altri contenitori sono idizionari(dict), conosciuti in altri contesti con il nome dihash tableoppurearray associativi.Esiste una sintassi per la creazione di dizionari, i cui elementi sono specificati da una coppia di dati separati da due punti ':'. Il primo elemento della coppia rappresenta l'indice, detto "chiave", e il secondo è il suo valore corrispondente. Infatti ogni elemento di un dizionario è detto anche "coppia chiave-valore".

Per esempio l'istruzione seguente crea un dizionario identificato comedizcomposto da due elementi le cui chiavi sonowikipediaewikiquote,rispettivamentee con associati i valori interi40e60:

diz={'wikipedia':40,'wikiquote':60}

Le chiavi in un dizionario sono immutabili, mentre il valore corrispondente a ciascuna chiave è alterabile tramite un'assegnazione. La seguente istruzione modifica il valore corrispondente a "wikipedia", portandolo a 4500:

diz['wikipedia']=4500

A partire dalla versione 2.7 di Python[18]sono supportati anche gli insiemi (setefrozenset), ovvero insiemi non ordinati di oggettihashable.

Organizzazione a oggetti

[modifica|modifica wikitesto]

Ilsistema dei tipiPython è ben integrato con il sistema delleclassi.Anche se i tipi base non sono formalmente classi, come per esempio inC#,una classe può comunque ereditare da essi. In questo modo è possibile estendere stringhe, dizionari e perfino gli interi. È inoltre supportata l'ereditarietà multipla.[19]

Vengono supportate anche funzionalità estensive diintrospezionesui tipi e sulle classi. I tipi e le classi sono a loro volta oggetti che possono essere esplorati e confrontati. Gliattributisono gestiti in un dizionario.

Python è stato progettato in modo da risultare facilmente leggibile e scrivibile. Visivamente si presenta in modo lineare e pulito, con pochi costrutti sintattici rispetto ad altri linguaggi strutturati come per esempioC,PerloPascal.

Per esempio, Python ha solo due forme di ciclo:forche itera sugli elementi di una lista o su un iteratore (equivalente alforeachdi Perl o PHP) ewhile,che itera fintanto che l'espressione booleanaspecificata risulterà vera. In sostanza manca dei cicli in stile Cfor,dowhileeuntil,ma tutti questi possono essere espressi con dei semplici equivalenti. Allo stesso modo ha solamente il costruttoif elifelseper le scelte condizionate e non possiede néswitchgoto.

Un aspetto inusuale di 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 parentesi oppure con parole chiave; per esempio ilCe ilPerlusano{ }mentre ilPascalusabegineend.In questi linguaggi è solo una pura convenzione degli sviluppatoriindentare(ovvero spostare verso destra rispetto al margine sinistro della pagina) il codice sorgente interno a un blocco, per migliorare la leggibilità del codice e chiarire la struttura del flusso di esecuzione.

Python, invece, deriva il suo sistema di indentazione dal meno noto linguaggio di programmazioneOccam:invece di usare parentesi o parole chiave, usa l'indentazionestessa per indicare i blocchi nidificati, in congiunzione col carattere "due punti" (:). L'indentazione si può ottenere sia con ilcarattere di tabulazionesia con un numero arbitrario di spazi, purché ovviamente si operi in modo congruente con la sintassi del linguaggio. L'esempio che segue chiarisce questo aspetto, mostrando la versione in C e in Python di funzioni per il calcolo del fattoriale di un numero intero.

Fattoriale in C:

intfattoriale(intx){
if(x==0)
return1;
else
returnx*fattoriale(x-1);
}

Funzione Fattoriale in Python:

deffattoriale(x):
ifx==0:
return1
else:
returnx*fattoriale(x-1)

All'inizio questo modo di indicare i blocchi e esprimere la sintassi può confondere le idee a chi viene da altri linguaggi, ma poi si rivela molto vantaggioso, perché risulta conciso e obbliga a scrivere sorgenti indentati correttamente, aumentando così la leggibilità del codice.

Lo svantaggio è che la gestione degli spazi e dei caratteri di tabulazione può essere diversa da uneditor di testoall'altro, il che costringe a prestare attenzione nell'indentare il codice oppure ad affidarsi alle funzioni di indentazione automatica ormai presenti nella maggior parte degli editor di programmi. Può anche capitare di lavorare con editor di codice sorgente diversi, su vari computer, e ritrovarsi così con codice sorgente che usa in modo misto tabulazioni e spazi, accorgendosi dell'errore solo in fase di esecuzione.

Python permette anche alcune scorciatoie per scrivere una maggiore quantità di codice sulla stessa riga. Se i due punti (:) danno il via a un blocco indentato di una sola istruzione, esso può essere scritto anche sulla stessa riga, preceduto da uno spazio.

ifb>a:print("b is greater than a")

Sebbene decisamente poco apprezzabile per i puristi del linguaggio Python, è comunque possibile usare il "punto e virgola"(;) come in grande parte dei linguaggi di programmazione per indicare che un'istruzione è conclusa, e cominciarne un'altra sulla stessa riga.

a=b+10;print("Hello world");b=243-23;

Programmazione funzionale e sintassi avanzate

[modifica|modifica wikitesto]

Un altro punto di forza di Python è la disponibilità di elementi che facilitano laprogrammazione funzionale.Le funzioni sono considerate degli oggetti e sono dunque utilizzabili alla stregua di qualsiasi altro oggetto, ad esempio inserendole in collezioni o utilizzandole direttamente come parametri per altre funzioni. Gli elementi di programmazione funzionale, insieme a costrutti specifici per la manipolazione di contenitori, rendono ancora più comodo operare con liste o altri tipi contenitore.

Glislicingsono un costrutto simile all'indicizzazione in grado di ottenere sottosequenze specificando gli indici di inizio e di fine e lo 'step'.

numeri=[1,2,3,4,5]
numeri_pari=numeri[1::2]# esempio di slicing

Lalist comprehensionè un costrutto preso dal linguaggio funzionaleHaskelle consente il "riempimento" di una lista - usando una sintassi apposita - 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**nforninnumeri]# esempio di list comprehension

Igeneratorisono invece dei particolari oggetti in grado di costruire delle collezioni in maniera dinamica, utili per aumentare l'efficienza in particolare presenza di iterazioni su un gran numero di elementi. Legenerator expression,simili alle list comprehension, sono uno strumento rapido ed efficace per creare generatori. La parola chiaveyieldpermette di creare generatori con una sintassi del tutto simile a quella di una funzione.

Passiamo a qualche esempio;generator expression:

numeri=[1,2,3,4,5]
potenze_di_due=(2**nforninnumeri)# generatore

Oppure, per avere un maggiore controllo, come una normale funzione, possiamo usare la parola chiaveyieldal posto direturn,per trasformare la nostra funzione in un generatore. In questo modo la funzione 'salva' il suo stato, per poi riprendere l'esecuzione del codice quando viene richiamato il valore delloyieldsuccessivo.

numeri=[1,2,3,4,5]
defpotenza_di_due(numeri):
forninnumeri:
yield2**n
gen=potenza_di_due(numeri)

L'uso è identico. Si chiama la funzione next che restituisce un nuovo valore ogni volta, riprendendo l'esecuzione del codice dalla parola chiaveyield.Quando i valori sono finiti, viene sollevata un'eccezioneStopIterationError.In ogni caso, non è l'unico modo di interagire con i generatori, e si può risalire ai data passati allo yeld della funzione in questo modo:

gen=(2**nforninrange(1,6))
forxingen:
print(x)

Per creare una lista da un generatore, si usa semplicemente la chiamata list(gen):

gen=(2**nforninrange(1,6))
print(list(gen))

I generatori sono preferiti alle liste in quanto non occupano memoria, dato che i valori sono semplicemente calcolati di volta in volta e non permangono in memoria. Per questo è consigliabile usare, per esempio,xrange(che è un generatore) al posto dirange(che restituisce una lista) con numeri molto grandi, per garantire una maggiore velocità

È anche possibile scrivere espressioni if...else su una sola riga, cosa che risulta utile in combinazione con le lambda (vedi sotto).

importrandom
l=[1,2]
a=random.choice(l)
print('Giusto!'ifa==1else'Sbagliato!')

Dal momento che Python permette di averefunzioni come argomenti,è anche possibile avere costrutti funzionali più sottili, come ad esempio lacontinuazione.[20]

In Python esiste la parola chiavelambda,particolarmente utile in contesti dove è necessario svolgere piccole operazioni che probabilmente saranno effettuate solo in quella zona del codice:

>>>l=[1,2,3,4,5]# oppure range(1,6)
>>>print(map(lambdax:x+10,l))
[11,12,13,14,15]

Questo uso di map però è contestato e si preferisce usare le list-comprehension:

>>>l=[1,2,3,4,5]# oppure range(1,6)
>>>print([x+10forxinl])
[11,12,13,14,15]

I blocchilambdapossono però contenere soloespressioni,nonstatement.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 unoscopelocale, ovvero unaclosure:

defmultiple_adder(x,y):
defadder(z):
returnz+x+y
return(x+y+adder(x+y))# sarebbe (x + y) * 3

Undecoratoreè qualsiasi oggetto di Python invocabile usato per aggiungere codice all'inizio o al termine di una funzione, un metodo o una definizione di classe, senza modificarne internamente il codice. Un decoratore è passato all'oggetto e ritorna l'oggetto modificato.

I decoratori sono ispirati in parte dalla notazione Java, hanno una sintassi simile e sono consideratizucchero sintattico.Usano@come parola chiave:

@viking_chorus
defmenu_item():
print("spam")

I decoratori possono essere a catena posizionandone diversi in linee adiacenti:

@invincible
@favorite_color("Blue")
defblack_knight():
pass

ed è equivalente a:

defblack_knight():
pass
black_knight=invincible(favorite_color("Blue")(black_knight))

La struttura standard del decoratore è:

deffavorite_color(color):
defdecorator(func):
defwrapper():
print(color)
func()
returnwrapper
returndecorator

Analogamente ad altri linguaggi di programmazione, in Python è possibile lasciare dei commenti nelle righe di codice per comprendere e far comprendere meglio ciò che accade eseguendo il programma. In Python i commenti (già a partire dalle primissime versioni del linguaggio di programmazione) si introducono con il simbolo "#"; tutto ciò che è scritto nella stessa riga dopo tale simbolo viene ignorato.

print("qualcosa a caso")#questo programma stampa "qualcosa a caso" nella console ignorando tutto ciò che viene scritto dopo il simbolo "#"
print("andando a caporiga l'effetto del cancelletto sparisce e il codice ha effetto sul programma")

Spesso i commenti vengono utilizzati per il cosiddetto "Debugging",in quanto è possibile commentare delle specifiche linee di codice per farle saltare all'IDE.

Un esempio pratico sarebbe:

print("Questa riga stampa qualcosa alla console")
# print( "Questa invece, non stampa niente." )

Questa forma di debugging serve per rimuovere provvisoriamente delle linee di codice, tenendole sotto commento per uso futuro.

Gestione delle eccezioni

[modifica|modifica wikitesto]

Python supporta e usa estesamente lagestione delle eccezionicome mezzo per segnalare e controllare eventuali condizioni di errore, incluse le eccezioni generate dagli errori di sintassi.

Leeccezionipermettono un controllo degli errori più conciso e affidabile rispetto a molti altri modi possibili usati in genere per segnalare errori o situazioni anomale. Le eccezioni sonothread-safe;non sovraccaricano ilcodice sorgentecome fanno invece i controlli sui valori di errore restituiti e possono facilmente propagarsi verso l'alto nellostackdelle chiamate a funzione quando un errore deve essere segnalato a un livello più alto del programma.

Con la gestione delle eccezioni i controlli preventivi sono sostituiti da un più agevole meccanismo che permette di eseguire direttamente l'azione desiderata e catturare separatamente le eventuali eccezioni che si possono verificare. Oltre che per la gestione degli errori, in alcune occasioni le eccezioni sono usate in Python anche per il controllo di flusso: ad esempio l'operazione di iterazione, e di conseguenza il ciclofor,è basata su una segnalazione tramite eccezione.

Libreria standard

[modifica|modifica wikitesto]

Python ha una vastalibreria 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 supportatiMIME,HTTPe tutti gli altri standard Internet. Sono anche disponibili moduli per creare applicazioni con interfaccia grafica, per connettersi adatabase relazionali,per usare leespressioni regolari.

La libreria standard è uno dei punti forti di Python, in quanto compatibile con tutte le piattaforme, a eccezione di poche funzioni, segnalate chiaramente nella documentazione come specifiche di una piattaforma particolare.

Esempi di programma

[modifica|modifica wikitesto]

Il seguente esempio di programma Python (versione 3.0) stampa il testo "Hello, world!":

print("Hello, world!")

Il seguente è lo stesso programma funzionante con la versione 2.7 o precedenti:

print"Hello, world!"

Creazione di un Socket, invio di richieste e ricevere dati

[modifica|modifica wikitesto]
importsocket

# creazions socket
s=socket.socket()

# connessione server(google)
s.connect(("google",80))

# la richiesta
richiesta=richiesta="GET / HTTP/1.1\nHost: google\n\n"

# invio dati codificati
s.send(richiesta.encode())

# ricevi dati (home page di google)
dati=s.recv(2048)
whilelen(dati)>0:
print(dati)
dati=s.recv(2048)

Formattazione Stringa ed Input

[modifica|modifica wikitesto]
a=input('Name: ')
b=input('Last Name: ')
c=input('Age: ')
print(f"Name ={a}\nLast Name ={b}\nAge={c}")
# Ma puoi anche:
print("Name ={}\nLast Name ={}\nAge ={}".format(a,b,c))
# Programma che simula l'inserimento di una password e la sua convalida

# Il modulo getpass nasconde l'input dell'utente
importgetpass

# Convalida della password: se errata l'utente ha in tutto 3 tentativi
tentativi=3
password_corretta="MyPa55w0rd!"

whiletentativi>0:
# Input per l'utente con la funzione getpass() del modulo importato
password=getpass.getpass("Inserisci la password:")

ifpassword==password_corretta:
print("Password corretta. Accesso consentito.")
break
else:
tentativi-=1
iftentativi==0:
print("Password errata. Accesso negato.")
else:
print("Password errata. Tentativi rimasti",tentativi)

RGB binario, RGB esadecimale

[modifica|modifica wikitesto]

Il seguente esempio di programma Python (versione 3.8.5[21]) converte con i dovuti passaggi delle percentuali di rosso, verde e blu, uninputin un colore codificato inRGB:

defRGB_bin():
importstring
percentage1=input("red (%dex): ")
percentage2=input("green (%dex): ")
percentage3=input("blue (%dex): ")
print("Coding in RGB a color with"+str(percentage1)+"% of red, "+str(percentage2)+"% of green and "+str(percentage3)+"% of blue... ")

print(str(percentage1)+":100 = X: 256, so X ="+str(percentage1)+"* 256 / 100.")
X=float(int(percentage1)*256/100)

print(str(percentage2)+":100 = Y: 256, so Y ="+str(percentage2)+"* 256 / 100.")
Y=float(int(percentage2)*256/100)

print(str(percentage3)+":100 = Z: 256, so Z ="+str(percentage3)+"* 256 / 100.")
Z=float(int(percentage3)*256/100)

X=bin(int(X))
Y=bin(int(Y))
Z=bin(int(Z))
binary_colour=(str(X)+""+str(Y)+""+str(Z))
print("Colour coded by binary digits:"+str(binary_colour[2:]))

defRGB_hex():
percentage1=input("red (%dex): ")
percentage2=input("green (%dex): ")
percentage3=input("blue (%dex): ")
print("Coding in RGB a color with"+str(percentage1)+"% of red, "+str(percentage2)+"% of green and "+str(percentage3)+"% of blue... ")

print(str(percentage1)+":100 = X: 256, so X ="+str(percentage1)+"* 256 / 100.")
R=float(int(percentage1)*256/100)

print(str(percentage2)+":100 = Y: 256, so Y ="+str(percentage2)+"* 256 / 100.")
G=float(int(percentage2)*256/100)

print(str(percentage3)+":100 = Z: 256, so Z ="+str(percentage3)+"* 256 / 100.")
B=float(int(percentage3)*256/100)

R=hex(int(R))
G=hex(int(G))
B=hex(int(B))
hexadecimal_colour=(str(R)+""+str(G)+""+str(B))
print("Colour coded by hexadecimal digits:"+str(hexadecimal_colour[2:5])+str(hexadecimal_colour[7:10])+str(hexadecimal_colour[12:14]))

L'outputdelcodice sorgentesopra è il seguente:

========RESTART:D:\Python\Python\Python38-32\Python3.8.5dalpc\RGB.py=======
>>>RGB_bin()
red(%dex):30
green(%dex):40
blue(%dex):20
CodinginRGBacolorwith30%ofred,40%ofgreenand20%ofblue...
30:100=X:256,soX=30*256/100.
40:100=Y:256,soY=40*256/100.
20:100=Z:256,soZ=20*256/100.
Colourcodedbybinarydigits:10011000b11001100b110011

Definizione di una classe

[modifica|modifica wikitesto]

In Python è possibile creare classi attraverso un'istruzione specifica (class) che rappresenta l'alternativa più semplice, ma non esclusiva, per definire nuovi tipi di dato. Caratteristiche particolari in Python sono la possibilità di eredità multipla, la definizione di attributi tramite inizializzazione e non tramite dichiarazione, la dichiarazione esplicita del parametro riflessivo nei metodi d'istanza e l'overloadingdi funzioni e operatori.

Il parametro riflessivo è per convenzione chiamato 'self', ma il linguaggio non impone alcuna restrizione in merito alla scelta. Nessuna restrizione è posta anche alla definizione degli attributi: gli attributi esistono dal momento in cui vengono assegnati e l'assegnazione può avvenire al momento della costruzione (metodo__init__,da preferire) oppure all'interno di altri metodi. Inoltre gli attributi possono essere aggiunti esternamente alla classe o direttamente a un oggetto.

Python fa distinzione tra metodi d'istanza, di classe o statici. Gli attributi possono essere invece d'istanza o di classe. Il supporto all'information hiding è parziale, ma integrato dallo strumento dellepropertyche permettono di definire degli attributi virtuali con le caratteristiche di accesso volute.

Inoltre sono previsti dei metodi "speciali" associati a operatori e funzioni di built-in. Ad esempio, ridefinendo il metodo__add__si ridefinisce l'operatore di addizione quando il primo operando sia del tipo definito, mentre__str__ridefinisce la conversione a stringa. Non è invece permesso l'overloading dei metodi. Attraverso l'uso della riflessione e delle metaclassi è inoltre possibile personalizzare ulteriormente la definizione delle classi.

Ad esempio una classe Persona, avente solo un semplice costruttore e un metodo che restituisce il nome completo. È caldamente consigliato creare solo classi "new style", ovvero classi che ereditano (direttamente o indirettamente) da object[22].

A partire da Python 3.6, è possibile utilizzare una nuova funzione chiamata "f-strings"[23].Anteponendo la letterafprima delle virgolette che aprono la dichiarazione di una stringa, questa funzione viene attivata. Grazie a essa è possibile includere variabili all'interno di una stringa inserendo il loro nome tra parentesi graffe. In questo modo rendiamo il codice molto più leggibile senza dover utilizzare una serie di + per concatenare variabili e stringhe vuote. Inoltre, nel caso in cui volessimo includere una variabile o un oggetto non di tipo stringa, la conversione avverrà in automatico, risparmiando l'eccezione TypeError.

classPersona(object):
# Costruttore della classe
def__init__(self,nome,cognome):
self.nome=nome
self.cognome=cognome

defnome_completo(self):
full=f'Sig.{self.cognome}{self.nome}'
returnfull

persona=Persona('Mario','Rossi')
print(persona.nome_completo())

L'output presentato sarà il seguente:Sig. Rossi Mario

Numeri perfetti fino a n

L'output restituisce i numeri perfetti fino a n (inserito in print).

"""Numeri perfetti" ""
defprint_perfetti(n):
"""Stampa i numeri perfetti fino ad n" ""
foriinrange(2,n+1):
somma=0

forjinrange(1,i//2+1):# Oltre la metà + 1 non ci sono più divisori
ifi%j==0:
somma+=j# Aggiungo a somma il divisore trovato
#print(i, j, somma) # Stampa, se serve, i valori intermedi

ifsomma==i:
print(i,end="")
print(print_perfetti())
  1. ^Dal fileREADMEdella distribuzione 2.6.4: "What is Python anyway? Python is an interpreted, interactive object-oriented programming language suitable (amongst other uses) for distributed application development, scripting, numeric computing and system testing. Python is often compared to Tcl, Perl, Java, JavaScript, Visual Basic or Scheme."
  2. ^Fonte:Copia archiviata,suPython.org.URL consultato il 27 ottobre 2009(archiviato dall'url originaleil 17 dicembre 2009).
  3. ^How do I create a.pyc file?,sueffbot.org.URL consultato il 28 maggio 2020(archiviato dall'url originaleil 3 giugno 2020).
  4. ^Python 3 vs C gcc - Which programs are fastest? | Computer Language Benchmarks Game,subenchmarksgame-team.pages.debian.net.URL consultato il 28 maggio 2020.
  5. ^Psyco - Home Page,supsyco.sourceforge.net.URL consultato il 28 maggio 2020.
  6. ^(EN) The PyPy Team,PyPy,suPyPy,28 dicembre 2019.URL consultato il 28 maggio 2020.
  7. ^(EN) Real Python,Python Bindings: Calling C or C++ From Python – Real Python,sureal Python.URL consultato il 28 maggio 2020.
  8. ^(EN)CPython,sugithub.URL consultato il 5 ottobre 2024.
  9. ^Jython: Python for the Java Platform
  10. ^IronPython: the Python programming language for the.NET Framework
  11. ^The Python programming language for S60 mobile phones
  12. ^PyPyArchiviatoil 13 gennaio 2007 inInternet Archive.
  13. ^24.1. turtle — Turtle graphics — Python 3.3.7 documentation,sudocs. Python.org.URL consultato il 28 maggio 2020.
  14. ^8.17. copy — Shallow and deep copy operations — Python 2.7.18 documentation,sudocs. Python.org.URL consultato il 28 maggio 2020.
  15. ^random — Generate pseudo-random numbers — Python 3.8.3 documentation,sudocs. Python.org.URL consultato il 28 maggio 2020.
  16. ^28.1. sys — System-specific parameters and functions — Python 2.7.18 documentation,sudocs. Python.org.URL consultato il 28 maggio 2020.
  17. ^9.4. decimal — Decimal fixed point and floating point arithmetic — Python 2.7.18 documentation,sudocs. Python.org.URL consultato il 28 maggio 2020.
  18. ^5. Built-in Types — Python 2.7.18 documentation,sudocs. Python.org.URL consultato il 28 maggio 2020.
  19. ^(EN)Ereditarietà multipla,suPython ABC.URL consultato il 28 maggio 2020.
  20. ^Continuations Made Simple and Illustrated
  21. ^rilascio versione 3.8.5,suPython.org.
  22. ^Un nuovo stile per le classi | Python-it.org # il punto di riferimento italiano per gli appassionati di Python,suPython -it.org.URL consultato il 23 giugno 2010(archiviato dall'url originaleil 6 agosto 2010).
  23. ^(EN)PEP 498 -- Literal String Interpolation,suPython.org.URL consultato il 23 maggio 2019.

Collegamenti esterni

[modifica|modifica wikitesto]
Controllo di autoritàLCCN(EN)sh96008834·GND(DE)4434275-5·BNF(FR)cb13560465c(data)·J9U(EN,HE)987007563637105171
 Portale Software libero:accedi alle voci di Wikipedia che trattano di software libero