Spesso è tra i primi linguaggi di programmazione a essere studiati dai neofiti, per la sua somiglianza a uno pseudo-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 tramite Pygame oppure il back-end di un sito web tramite Flask o Django.
Python dispone anche di una sezione grafica, il modulo Python Turtle Graphics, che permette di applicare le righe di codici alla grafica.
Descrizione
È un linguaggio che ha tra i principali obiettivi: dinamicità, semplicità e flessibilità. Python è un linguaggio semplice poiché progettato per essere facilmente comprensibile fino ad includere alcuni elementi del linguaggio naturale. Flessibile perché si presta ad un ampio spettro di utilizzi grazie alle sue numerose librerie.[non chiaro].
Supporta multipli paradigmi di programmazione, tra cui quello a oggetti e quello funzionale.
Le caratteristiche più immediatamente riconoscibili di Python sono le variabili non tipizzate e l'uso dell'indentazione per la sintassi delle specifiche, al posto delle più comuni parentesi.
Altre caratteristiche distintive sono l'overloading di operatori e funzioni tramite delegati, la presenza di un ricco assortimento di tipi e funzioni di base e librerie standard, sintassi avanzate quali slicing e list comprehension.
Il controllo dei tipi è forte (strong typing) e viene eseguito a run-time (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 sistema garbage collector per la liberazione e il recupero automatici della memoria con cui si lavora.
Python ha qualche somiglianza con Perl, 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 come linguaggio di scripting, ma pur essendo utile per scrivere script di sistema, in alternativa per esempio a bash, 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
Sebbene Python venga in genere considerato e presentato come un linguaggio interpretato, in realtà il codice sorgente non viene convertito direttamente in linguaggio macchina, ma passa prima da una fase di pre-compilazione in bytecode, 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].
Come il linguaggio Lisp e a differenza del Perl, l'interprete Python supporta anche un modo d'uso interattivo (REPL) attraverso cui è possibile inserire codice direttamente da un terminale, visualizzando immediatamente il risultato.
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 un framework per lo unit testing che supporta lo sviluppo di test unitari automatici.
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[4], specie nel calcolo matematico. Inoltre, il programma si basa unicamente su un core, e il multithreading è presente al solo livello astratto. Esisteva un'estensione, Psyco[5], il cui sviluppo è terminato nel 2012, che era una sorta di compilatore 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 un compilatore JIT è PyPy[6].
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[7].
Implementazioni
CPython: è l'implementazione di riferimento del linguaggio Python. Scritto in C e Python, è l'implementazione più usata in assoluto;[8]
PyPy: scritto in Python stesso. Ha tra i principali obiettivi la semplificazione dello sviluppo del linguaggio e la sua ottimizzazione in termini prestazionali[12];
Sintassi
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 esempio C, Perl o Pascal.
Per esempio, Python ha solo due forme di ciclo: for che itera sugli elementi di una lista o su un iteratore (equivalente al foreach di Perl o PHP) e while, che itera fintanto che l'espressione booleana specificata risulterà vera. In sostanza gli mancano i cicli in stile C come il for, il do...while e come l'until del Pascal, ma tutti questi possono essere espressi con dei semplici equivalenti. Allo stesso modo ha solamente il costrutto if...elif...else per le scelte condizionate e non possiede né switch né goto.
Indentazione
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 il C e il Perl usano {} mentre il Pascal usa begin e end. In questi linguaggi è solo una pura convenzione degli sviluppatori indentare (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 programmazione Occam: invece di usare parentesi o parole chiave, usa l'indentazione stessa per indicare i blocchi nidificati, in congiunzione col carattere "due punti" (:). L'indentazione si può ottenere sia con il carattere di tabulazione sia 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.
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 un editor di testo all'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;
Tipi di dati e strutture
Essendo Python a tipizzazione dinamica, tutte le variabili sono, in realtà, puntatori a oggetto. 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, ovvero run-time. I tipi numerici godono di conversione implicita, perciò è possibile, per esempio, moltiplicare un numero complesso per 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 linguaggio PHP.
Python dispone di vari modelli/librerie da utilizzare per fornire funzionalità senza dovere scrivere codice, come per esempio il modulo turtle graphics[13] (per disegnare), copy[14] (per creare copie di oggetti), random[15] (per generare numeri casuali), sys[16] (per interagire da riga di comandi con l'interprete) e time (per operare con unità di tempo e date).
Python mette a disposizione un gran numero di tipi base, essenzialmente numerici e contenitori. Caratteristica distintiva è il supporto nativo, oltre che ai classici tipi quali interi, numeri in virgola mobile e stringhe alfanumeriche, anche a tipi più evoluti quali interi a grandezza arbitraria, numeri complessi, liste, insiemi e dizionari. Non è invece previsto un tipo specifico per i caratteri.
Molti altri tipi sono importabili da librerie standard e nuovi tipi possono essere creati attraverso le classi.
Tipi numerici
I tipi interi (int) e floating point (float) hanno una dimensione dipendente dall'hardware e dall'implementazione dell'interprete, in genere 32 e 64 bit. 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 in REXX o in Cobol, che non soffrono di problemi di arrotondamento e stabilità tipici dei numeri floating point classici.
Contenitori
Python considera in generale come contenitori gli oggetti che prevedono la possibilità di iterare su un insieme di elementi, perciò utilizzabili all'interno di contesti quali il ciclo for e 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 come sequenze, insiemi e dizionari. I contenitori seguono una filosofia comune e condividono gran parte dei metodi.
Le sequenze sono contenitori ordinati, che condividono metodi basati sull'ordinamento, l'indicizzazione intera e la creazione di sottosequenze tramite slicing.
Le liste (list) sono sequenze estendibili, mentre le tuple (tuple) sono sequenze immutabili. Anche le stringhe alfanumeriche (str e unicode) sono considerate sequenze. A partire da Python 3.0, i tipi str e unicode sono unificati e compare il tipo byte, 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 in C#.
Altri contenitori sono i dizionari (dict), conosciuti in altri contesti con il nome di hash table oppure array 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 come diz composto da due elementi le cui chiavi sono wikipedia e wikiquote, rispettivamente e con associati i valori interi 40 e 60:
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 (set e frozenset), ovvero insiemi non ordinati di oggetti hashable.
Organizzazione a oggetti
Il sistema dei tipi Python è ben integrato con il sistema delle classi. Anche se i tipi base non sono formalmente classi, come per esempio in C#, 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 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.
Programmazione funzionale e sintassi avanzate
Questa voce o sezione sull'argomento informatica è ritenuta da controllare.
Motivo: Troppe cose e poco chiare. Perché la sintassi avanzata deve stare qui?
Un altro punto di forza di Python è la disponibilità di elementi che facilitano la programmazione funzionale. Le funzioni sono considerate degli oggetti e sono dunque utilizzabili alla stregua di qualsiasi altro oggetto, per 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.
Gli slicing sono 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
La list comprehension è un costrutto preso dal linguaggio funzionale Haskell e 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
I generatori sono 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. Le generator expression, simili alle list comprehension, sono uno strumento rapido ed efficace per creare generatori. La parola riservatayield permette di creare generatori con una sintassi del tutto simile a quella di una funzione.
Oppure, per avere un maggiore controllo, come una normale funzione, possiamo usare la parola chiave yield al posto di return, 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 dello yield successivo.
L'uso è identico. Si chiama la funzione next che restituisce un nuovo valore ogni volta, riprendendo l'esecuzione del codice dalla parola chiave yield. Quando i valori sono finiti, viene sollevata un'eccezione StopIterationError. In ogni caso, non è l'unico modo di interagire con i generatori, e si può risalire ai data passati allo yield 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 di range (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).
Dal momento che Python permette di avere funzioni come argomenti, è anche possibile avere costrutti funzionali più sottili, come per esempio la continuazione.[20]
In Python esiste la parola chiave lambda, particolarmente utile in contesti dove è necessario svolgere piccole operazioni che probabilmente saranno effettuate solo in quella zona del codice:
I blocchi lambda possono però 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:
defmultiple_adder(x,y):defadder(z):returnz+x+yreturn(x+y+adder(x+y))# sarebbe (x + y) * 3
Decoratori
Un decoratore è 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 considerati zucchero sintattico. Usano @ come parola chiave:
@viking_chorusdefmenu_item():print("spam")
I decoratori possono essere a catena posizionandone diversi in linee adiacenti:
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
Python supporta e usa estesamente la gestione delle eccezioni come mezzo per segnalare e controllare eventuali condizioni di errore, incluse le eccezioni generate dagli errori di sintassi.
Le eccezioni permettono 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 sono thread-safe; non sovraccaricano il codice sorgente come fanno invece i controlli sui valori di errore restituiti e possono facilmente propagarsi verso l'alto nello stack delle 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 ciclo for, è basata su una segnalazione tramite eccezione.
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 anche disponibili 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, 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
Hello, world!
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
importsocket# creazions sockets=socket.socket()# connessione server(google)s.connect(("www.google.com",80))# la richiestarichiesta=richiesta="GET / HTTP/1.1\nHost: www.google.com\n\n"# invio dati codificatis.send(richiesta.encode())# ricevi dati (home page di google)dati=s.recv(2048)whilelen(dati)>0:print(dati)dati=s.recv(2048)
Formattazione delle stringhe e funzione input
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 = {}\n Age = {}".format(a,b,c))
# Programma che simula l'inserimento di una password e la sua convalida# Il modulo getpass nasconde l'input dell'utenteimportgetpass# Convalida della password: se errata l'utente ha in tutto 3 tentativitentativi=3password_corretta="MyPa55w0rd!"whiletentativi>0:# Input per l'utente con la funzione getpass() del modulo importatopassword=getpass.getpass("Inserisci la password: ")ifpassword==password_corretta:print("Password corretta. Accesso consentito.")breakelse:tentativi-=1iftentativi==0:print("Password errata. Accesso negato.")else:print("Password errata. Tentativi rimasti",tentativi)
RGB binario, RGB esadecimale
Il seguente esempio di programma Python (versione 3.8.5[21]) converte con i dovuti passaggi delle percentuali di rosso, verde e blu, un input in un colore codificato in RGB:
defRGB_bin():importstringpercentage1=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]))
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'overloading di 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 delle property che 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.
Per 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 lettera f prima 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 classedef__init__(self,nome,cognome):self.nome=nomeself.cognome=cognomedefnome_completo(self):full=f'Sig. {self.cognome}{self.nome}'returnfullpersona=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=0forjinrange(1,i//2+1):# Oltre la metà + 1 non ci sono più divisoriifi%j==0:somma+=j# Aggiungo a somma il divisore trovato#print(i, j, somma) # Stampa, se serve, i valori intermediifsomma==i:print(i,end=" ")print(print_perfetti())
Note
^Dal file README della 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."
^Fonte: Copia archiviata, su python.org. URL consultato il 27 ottobre 2009 (archiviato dall'url originale il 17 dicembre 2009).
^How do I create a .pyc file?, su effbot.org. URL consultato il 28 maggio 2020 (archiviato dall'url originale il 3 giugno 2020).
Free trade agreement USMCA redirects here. For the geographic code, see UN/LOCODE:USMCA. For the air branch of the United States Marine Corps, see United States Marine Corps Aviation. Agreement between the United States of America, the United Mexican States, and CanadaUnited States–Mexico–Canada Agreement (USMCA) (American English)Canada–United States–Mexico Agreement (CUSMA) (Canadian English)Tratado entre México, Estados Unidos y Canadá (T-MEC) (Spanish)Accord Canad...
American film production company founded 1998 The Montecito Picture CompanyCompany typePublicIndustryMotion picturesPredecessorNorthern Lights Entertainment[1]Founded1998; 26 years ago (1998)FoundersTom PollockIvan ReitmanHeadquarters10202 West Washington Boulevard, Culver City, CaliforniaU.S.Key peopleAmie Karp (president) The Montecito Picture Company is a film production company that was founded by Tom Pollock and Ivan Reitman.[2] It is located on the Sony...
France 3Champagne-ArdenneCaractéristiquesCréation 25 février 1965Disparition 1er janvier 2017 (disparition informelle)Propriétaire France TélévisionsSlogan « Sur France 3, vous êtes au bon endroit »Format d'image 16/9, 576i (SD), 1080i (HD)Langue FrançaisPays FranceStatut Généraliste régionale publiqueSiège social ReimsAncien nom Télé Lorraine-Champagne (1965-1975)FR3 Lorraine Champagne-Ardenne (1975-1992)France 3 Lorraine Champagne-Ardenne (1992-2010)Site web https...
Pour les articles homonymes, voir Schilling. Taylor Schilling Taylor Schilling en 2014, en promotion pour la série télévisée Orange Is the New Black. Données clés Nom de naissance Taylor Jane Schilling Naissance 27 juillet 1984 (39 ans)Boston, Massachusetts, (États-Unis) Nationalité Américaine Profession Actrice Films notables The Lucky One Séries notables Mercy HospitalOrange Is the New Black modifier Taylor Schilling est une actrice américaine, née le 27 juillet 1984 à Bo...
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) The topic of this article may not meet Wikipedia's notability guideline for biographies. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be...
Autoklaf Autoklaf adalah alat pemanas tertutup yang digunakan untuk mensterilisasi suatu benda menggunakan uap bersuhu dan bertekanan tinggi (1210C, 15 lbs) selama kurang lebih 15 menit.[1][2] Peningkatan tekanan pada autoklaf tidak dimaksudkan untuk membunuh mikroorganisme, melainkan meningkatkan suhu dalam autoklaf.[1] Suhu yang tinggi inilah yang akan membunuh microorganisme.[1] Autoklaf terutama ditujukan untuk membunuh endospora, yaitu sel resisten yang di...
Major landform in eastern North America This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (December 2016) (Learn how and when to remove this message) A map of the Appalachian Mountains and the Great Appalachian Valley, stretching from Quebec in the north to Alabama in the south The Great Appalachian Valley, also called The Great Valley or Great Valley Region, is...
Facade of the house The Tlaxcala House is located at 40 San Ildefonso Street in the historic center of Mexico City. It is an example of a typical middle-class home of the 18th century, meant that its style is somewhere between the mansions of the wealthy and the houses of the commoners of the time.[1] The outer facade has two levels, with most of the surface covered in tezontle, a blood-red volcanic stone, with chiluca, a grayish white stone, to frame windows and doors. In the lower p...
US election 1982 United States Senate election in Massachusetts ← 1976 November 2, 1982 1988 → Nominee Ted Kennedy Ray Shamie Party Democratic Republican Popular vote 1,247,084 784,602 Percentage 60.81% 38.26% County results Municipality resultsKennedy: 40–50% 50–60% 60–70% 70–80% 80–90% ...
Anti-tank weapon B-300 TypeAnti-tankPlace of originIsraelService historyUsed bySee OperatorsWarsLebanese Civil War1st and 2nd Intifada2006 Lebanon WarGaza War2020 Nagorno-Karabakh conflictProduction historyDesignerIsrael Military IndustriesDesigned1970sManufacturerIsrael Military IndustriesProduced1980s–presentSpecificationsMass3.65 kg (8.0 lb) empty 8 kg (18 lb) loaded [citation needed]Length1,440 mm (57 in)Crew1Caliber82 mm (3.2...
American baseball player (born 1946) Baseball player Ken RudolphRudolph with the Cubs in 1973CatcherBorn: (1946-12-29) December 29, 1946 (age 77)Rockford, Illinois, U.S.Batted: RightThrew: RightMLB debutApril 20, 1969, for the Chicago CubsLast MLB appearanceSeptember 7, 1977, for the Baltimore OriolesMLB statisticsBatting average.213Home runs6Runs batted in64 Teams Chicago Cubs (1969–1973) San Francisco Giants (1974) St. Louis Cardinals (1975–1976) San F...
1990s UK political scandal This article is part of a series aboutJohn Major Electoral history MP for Huntingdon 1990 budget Prime Minister of the United Kingdom Premiership First Ministry and Term 1990 leadership election Cabinet Citizen's Charter Charter Mark Cones Hotline Early 1990s recession Gulf War 1992 general election Second Ministry and Term Cabinet Black Wednesday National Lottery Further and Higher Education Act 1992 Grant-maintained schools Maastricht Treaty rebels Northern Irelan...
Communist political system You can help expand this article with text translated from the corresponding article in Spanish. (January 2022) Click [show] for important translation instructions. View a machine-translated version of the Spanish article. Machine translation, like DeepL or Google Translate, is a useful starting point for translations, but translators must revise errors as necessary and confirm that the translation is accurate, rather than simply copy-pasting machine-translated...
Felipe VI de España Rey de España Felipe VI en 2023Reinado Desde el 19 de junio de 2014(10 años)Predecesor Juan Carlos IInformación personalNombre completo Felipe Juan Pablo Alfonso de Todos los Santos de Borbón y GreciaTratamiento Majestad [nota 1]Otros títulos Véase TítulosProclamación 19 de junio de 2014Nacimiento 30 de enero de 1968 (56 años)Madrid, EspañaHimno real Marcha RealReligión Católico[4]Residencia Palacio Real de MadridPalacio de la Zar...
Questa voce o sezione sull'argomento calcio non cita le fonti necessarie o quelle presenti sono insufficienti. Commento: La voce è carente di fonti, la seconda tabella ne è del tutto priva. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Silvio Piola è il migliore marcatore di sempre nella storia della Serie A con 274 gol, messi a segno tra il 1929 e il 1954 Indice 1 ...
هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (سبتمبر 2016) فضائل المدينة المنورة حرم النبي محمد صلى الله عليه وسلم المدينة المنورة على غير المسلمين، ودعى لأهل المدينة بالبركة، وحفظ الله المدينة من الطاعون والمسيح �...
Geena DavisLahirVirginia Elizabeth Davis21 Januari 1956 (umur 68)Wareham, Massachusetts, A.S.AlmamaterNew England CollegeBoston University (BFA)PekerjaanAktoraktivisprodusermodelTahun aktif1982–sekarangTinggi6 ft 0 in (1,83 m)[1]Suami/istri Richard Emmolo (m. 1981; c. 1984) Jeff Goldblum (m. 1987; c. 1991) Renny Harlin (m. 1993...
Yehezkiel 5Kitab Yehezkiel 30:13–18 pada suatu naskah bahasa Inggris dari awal abad ke-13, MS. Bodl. Or. 62, fol. 59a. Teks bahasa Ibrani disalin sebagaimana dalam kodeks bahasa Latin. Terjemahan bahasa Latin ditulis di bagian marjin.KitabKitab YehezkielKategoriNevi'imBagian Alkitab KristenPerjanjian LamaUrutan dalamKitab Kristen26← pasal 4 pasal 6 → Yehezkiel 5 (disingkat Yeh 5) adalah bagian dari Kitab Yehezkiel dalam Alkitab Ibrani dan Perjanjian Lama di Alkitab Kristen. Beri...