Piton
Piton limbaj de programare | |
---|---|
Autor | Guido van Rossum |
Data de origine | 20 februarie 1991 |
Ultima versiune | 3.9.6 (28 iunie 2021) și 3.10.0rc1 (3 august 2021) |
Utilizare | generic, scripting |
Paradigme | Programare orientată pe obiecte |
Tastare | dinamic |
Extensii comune | .py, .pyw, .pyc, .pyo, .pyd |
Influențată de | ABC , ALGOL 68 , C , C ++ , Dylan , Haskell , Icon , Java , Lisp , Modula-3 , Perl |
A influențat | Boo , Cobra , D , F # , Falcon , Go , Groovy , JavaScript , Julia , Ruby , Swift , Perl 6 |
Implementare referință | |
Sistem de operare | Multiplatform |
Licență | Licența Python Software Foundation |
Site-ul web | www.python.org/ |
Python este un limbaj de programare mai „înalt” decât majoritatea celorlalte limbaje, orientat obiect , potrivit, printre alte utilizări, pentru dezvoltarea de aplicații distribuite, scriptare , calcul numeric și testare de sistem .
Conceput de Guido van Rossum la începutul anilor nouăzeci , numele a fost ales pentru pasiunea inventatorului pentru Monty Pythons și pentru seria lor de televiziune Monty Python's Flying Circus [1] și este adesea comparat cu Ruby , Tcl , Perl , JavaScript , Visual Basic sau Scheme [2] .
De asemenea, este adesea studiat printre primele limbi pentru asemănarea sa cu un pseudo-cod și este frecvent utilizat pentru a simula crearea de software datorită flexibilității experimentale permise de Python, care permite programatorului să organizeze idei în timpul dezvoltării, cum ar fi de exemplu crearea unui joc prin Pygame sau back-end- ul unui site web prin Flask sau Django .
Python are și o secțiune grafică, modulul Python Turtle Graphics.
Descriere
Este un limbaj multi-paradigmă care are printre obiectivele sale principale: dinamism, simplitate și flexibilitate. Acceptă paradigma orientată obiect , programarea structurată și multe caracteristici funcționale și de reflecție .
Cele mai recunoscute caracteristici ale Python sunt variabilele netipate și utilizarea indentării pentru sintaxa specificațiilor, în locul parantezelor mai comune.
Alte trăsături distinctive sunt supraîncărcarea operatorilor și funcțiilor prin delegați , prezența unui sortiment bogat de tipuri și funcții de bază și biblioteci standard, sintaxe avansate, cum ar fi felierea și înțelegerea listelor .
Verificarea tipului este puternică ( tastare puternică ) și se efectuează în timp de execuție ( tastare dinamică ): o variabilă este un container căruia îi este asociată o etichetă (numele) care poate fi asociată cu containere diferite chiar și de tipuri diferite în timpul vieții sale. Un sistem de colectare a gunoiului pentru eliberarea și recuperarea automată a memoriei de lucru face parte din Python.
Python are o asemănare cu Perl , dar designerii săi au ales o sintaxă mai de bază și mai uniformă, cu scopul de a îmbunătăți lizibilitatea codului. În mod similar cu Perl, acesta este adesea clasificat ca limbaj de script , dar, deși este util pentru scrierea de scripturi de sistem, ca alternativă, de exemplu, la bash , cantitatea mare de biblioteci disponibile și ușurința cu care limba vă permite să scrieți software modular, de asemenea favorizează dezvoltarea de aplicații foarte complexe.
Alte caracteristici
Deși Python este în general considerat a fi un limbaj interpretat , în realitate codul sursă nu este convertit direct în limbaj mașină . De fapt, acesta trece mai întâi printr-o fază de pre-compilare în bytecode , care este aproape întotdeauna reutilizată după prima execuție a programului, evitând astfel reinterpretarea sursei de fiecare dată și îmbunătățirea performanței. Mai mult, este posibil să distribuiți programele Python direct în bytecode, sărind complet faza de interpretare de către utilizatorul final și obținând programe Python sursă închise [3] .
La fel ca limbajul Lisp și spre deosebire de Perl, interpretul Python acceptă și un mod interactiv de utilizator ( REPL ) prin care puteți introduce cod direct de la un terminal, afișând rezultatul imediat.
Mai mult, interpretorul Python este conținut în biblioteca standard, astfel încât, în multe alte limbi interpretate, este posibil să existe șiruri arbitrare evaluate în contextul actual. De asemenea, este posibil să transmiteți interpretului un context complet diferit, sub formă de liste care conțin lista simbolurilor definite.
Python are, de asemenea, un cadru de testare unitară care susține dezvoltarea testelor unitare automate.
Performanţă
În comparație cu limbajele compilate tipic static , cum ar fi C , viteza de execuție nu este unul dintre punctele forte ale Python [4] , în special în calculul matematic. În plus, programul se bazează doar pe un nucleu, iar multi-threading-ul este prezent doar la nivel abstract. A existat o extensie, Psyco [5] , a cărei dezvoltare s-a încheiat în 2012, care era un fel de compilator JIT , capabil să accelereze semnificativ unele tipuri de cod, în special implementarea algoritmilor, în detrimentul creșterii memoriei utilizate. Un proiect actual și dezvoltat activ pentru a îmbunătăți performanța codului Python cu un compilator JIT este PyPy [6] .
Python vă permite să evitați cu ușurință obstacolul performanței pure: este de fapt relativ simplu să scrieți o extensie în C sau C ++ și apoi să o utilizați în Python, exploatând astfel viteza mare a unui limbaj compilat doar în părțile din pe care îl servește de fapt și, în schimb, valorifică puterea și versatilitatea Python pentru tot restul software-ului [7] .
Alte implementări
Următoarele implementări Python sunt disponibile în prezent:
- Jython , în limbaj Java [8] ;
- IronPython , pentru platforma Microsoft .NET [9] ;
- Python pentru S60 , pentru dispozitive cu sistem de operare Symbian [10] ;
- PyPy : scris chiar în Python. Principalele sale obiective sunt simplificarea dezvoltării limbajului și optimizarea acestuia în termeni de performanță [11] ;
- Compilatorul Python Online de pe site-ul Repl.it poate rula programe în diferite versiuni ale Python și vă permite să salvați fișiere online. [12]
- Scripting Layer pentru Android (SL4A) pentru sistemul de operare Android include interpretul Python 2.6.2. [13]
Tipuri de date și structuri
Deoarece Python este tastat dinamic , toate variabilele sunt de fapt indicatori către obiecte . De exemplu, dacă unei variabile i se atribuie o valoare întreagă, un șir sau o listă poate fi atribuită imediat după aceea. Pe de altă parte, obiectele au un tip.
Python așteaptă verificarea tipului moderat în timpul rulării , adică în timpul rulării . Tipurile numerice au conversie implicită, deci este posibil, de exemplu, să înmulțim un număr complex cu un număr întreg. Nu există o conversie implicită între numere și șiruri alfanumerice; prin urmare, un număr este un argument nevalid pentru operațiile de șiruri, spre deosebire de ceea ce se întâmplă de exemplu în limbajul PHP.
Python are diverse șabloane / biblioteci de utilizat pentru a oferi funcționalitate fără a fi nevoie să scrieți cod, cum ar fi grafica țestoasă [14] (pentru desen), copie [15] (pentru crearea copiilor obiectelor ), aleatorie [16] (pentru generarea aleatorie numere), sys [17] (pentru a interacționa de la linia de comandă cu interpretul) și ora (pentru a opera cu unități de timp și dată).
Python oferă un număr mare de tipuri de bază , în esență tipuri numerice și de tip container. Caracteristică distinctivă este suportul nativ, pe lângă tipurile clasice, cum ar fi numere întregi, virgulă mobilă (numere cu virgulă mobilă) și șiruri alfanumerice, tipuri chiar mai avansate, cum ar fi numere întregi de dimensiuni arbitrare, numere complexe, liste , seturi și dicționare . Cu toate acestea, nu există un tip specific pentru caractere.
Multe alte tipuri sunt importabile din biblioteci standard și noi tipuri pot fi create prin clase .
Grafica Turtle
Modulul broasca țestoasă, ca și celelalte biblioteci, poate fi importat cu funcția de import corespunzătoare , scriind în codul sursă:
import broasca testoasa
din importul broaștei țestoase Turtle , Screen
Comenzile scrise mai sus pun la dispoziție obiectele Turtle și Screen, ale căror funcții pot fi atribuite obiectelor reale după cum urmează:
din importul broaștei țestoase Turtle , Screen # acesta va importa o broască țestoasă (pix stilou) și ecranul acesteia.
Fundal = Ecran () # deci atribuiți fiecare funcție și proprietate a Ecranului Fundal.
Pen = Turtle () # acesta va fi Pen.
# Desigur, orice nume de obiect poate fi atribuit broaștei țestoase și ecranului și schimbat pe parcursul programului.
Toate funcțiile fundalului și stiloul pot fi utilizate apelându-le ca în codul de mai jos:
Stilou . cerc ( 5 ) # de exemplu funcția cerc va crea un cerc care are valoarea în paranteze ca rază
#funcția setcolor (ambele referitoare la broască țestoasă și fundal) determină culoarea acesteia
Fundal . setcolor ( „portocaliu” ) # folosind numele de culoare dorit
Fundal . setcolor ( "FFFFFF" ) # sau scriind culoarea în RGB hexazecimal
Tipuri numerice
Tipurile întregi ( int
) și virgulă mobilă ( float
) au o dimensiune dependentă de hardware și de implementarea interpretului, de obicei 32 și 64 de biți . Se așteaptă în mod nativ numere întregi arbitrare mari ( long
, care devine opțiunea implicită pentru numere întregi care încep cu Python 3.0) și numere complex
( complex
).
Python are toți principalii operatori logici și aritmetici între numere, inclusiv exponențierea. Tipul boolean ( bool
) aparține, de asemenea, categoriei numerelor.
Întrucât versiunea 2.4 a Python este disponibilă ca bibliotecă [18], de asemenea, numerele zecimale ( decimal
), adică numerele cu virgulă mobilă cu precizie nelimitată, precum cele disponibile în REXX sau Cobol , care nu suferă de probleme de rotunjire și stabilitate tipică a numerelor puncte plutitoare clasice.
Containere
Python consideră, în general, ca containere obiecte care oferă posibilitatea de a itera pe un set de elemente, prin urmare utilizabile în contexte precum bucla for
și funcții precum suma, căutarea și sortarea. În general, containerele vă permit să păstrați date eterogene.
În ceea ce privește containerele standard propriu-zise, acestea pot fi clasificate ca secvențe , seturi și dicționare . Containerele urmează o filozofie comună și împărtășesc majoritatea metodelor .
Secvențele sunt containere comandate, metode de partajare bazate pe sortare, indexare întregi și crearea de subsecvențe prin feliere .
Listele ( list
) pot fi secvențe extinse, în timp ce tuplurile ( tuple
) sunt secvențe imuabile. Șirurile alfanumerice ( str
și unicode
) sunt, de asemenea, considerate secvențe. Începând cu Python 3.0, tipurile str
și unicode
sunt unificate și apare tipul de byte
, aproximativ echivalent cu un șir binar.
Sunt furnizate toate operațiile clasice de șiruri, cum ar fi concatenarea, formatarea, căutarea, înlocuirea și așa mai departe. Șirurile din Python sunt secvențe imuabile, astfel încât orice operație care ar putea modifica cumva un șir, cum ar fi substituirea unui caracter, returnează de fapt un șir nou, ca în Java și C #.
Alte containere sunt dicționare ( dict
), cunoscute în alte contexte sub numele de tabel hash sau matrici asociative . Există o sintaxă pentru crearea dicționarelor, ale căror elemente sunt specificate printr-o pereche de date separate printr-un punct „:”. Primul element al perechii reprezintă indexul, numit „cheie”, iar al doilea este valoarea sa corespunzătoare. De fapt, fiecare element al unui dicționar este numit și „pereche cheie-valoare”.
De exemplu, următoarea instrucțiune creează un dicționar identificat ca diz
compus din două elemente ale căror chei sunt wikipedia
și respectiv wikiquote
și cu valorile întregi asociate 40
și 60
:
diz = { 'wikipedia' : 40 , 'wikiquote' : 60 }
Cheile dintr-un dicționar sunt imuabile, în timp ce valoarea corespunzătoare fiecărei chei este modificabilă printr-o atribuire. Următoarea instrucțiune modifică valoarea corespunzătoare „wikipedia”, aducând-o la 4500:
diz [ 'wikipedia' ] = 4500
Începând de la versiunea 2.7 a Python [19] , seturile ( set
și frozenset
), adică seturile neordonate de obiecte hashable , sunt de asemenea acceptate .
Organizare orientată pe obiecte
Sistemul de tip Python este bine integrat cu sistemul de clasă . Chiar dacă tipurile de bază nu sunt în mod formal clase, ca în C # de exemplu, o clasă poate moșteni încă de la acestea. În acest fel este posibil să extindeți șiruri, dicționare și chiar numere întregi. Moștenirea multiplă este, de asemenea, acceptată [20] .
De asemenea, sunt acceptate caracteristici extinse de introspecție de tip și clasă. Tipurile și clasele sunt ele însele obiecte care pot fi explorate și comparate. Atributele sunt gestionate într-un dicționar.
Sintaxă
Python a fost conceput pentru a fi ușor de citit și de scris. Vizual este prezentat într-un mod liniar și curat, cu puține construcții sintactice în comparație cu alte limbaje structurate, cum ar fi C , Perl sau Pascal .
De exemplu, Python are doar două forme de bucle: for
care repetă elementele unei liste sau un iterator (echivalent cu Perl sau PHP foreach ) și în while
ce bucle atâta timp cât expresia booleană specificată este adevărată. În esență, îi lipsesc buclele în stil C for
, do
while
și until
, dar toate acestea pot fi exprimate ca echivalente simple. De asemenea , aceasta are numai if elif
else
constructul pentru alegerile condiționale, dar nu are nici switch
, nici goto
.
Indentare
Un aspect neobișnuit al Python este metoda pe care o folosește pentru a delimita blocurile de programe, ceea ce îl face unic printre cele mai populare limbi.
În limbile derivate din ALGOL precum Pascal, C și Perl, blocurile de coduri sunt indicate cu paranteze sau cu cuvinte cheie; de exemplu C și Perl folosesc {} în timp ce Pascal utilizează begin
și se end
. În aceste limbi, este doar o pură convenție a dezvoltatorilor să indenteze (adică „indentare” de la marginea stângă a paginii) codul sursă din interiorul unui bloc pentru a-i îmbunătăți lizibilitatea și a clarifica structura fluxului de execuție.
În schimb, Python își derivă sistemul de indentare din limbajul de programare Occam mai puțin cunoscut: în loc să utilizeze paranteze sau cuvinte cheie, folosește însuși indentarea pentru a indica blocuri imbricate împreună cu caracterul „colon” (:). În Python puteți utiliza atât o filă, cât și un număr arbitrar de spații, cu condiția să fie desigur utilizate într-un mod care să fie congruent cu sintaxa limbajului. Următorul exemplu clarifică acest lucru arătând versiunea C și Python a funcțiilor pentru calcularea factorialului unui număr întreg.
Factorial în C:
factorial int ( int x ) {
if ( x == 0 )
retur 1 ;
altceva
returnează x * factorial ( x -1 );
}
Factorial în Python:
factorial def ( x ):
dacă x == 0 :
retur 1
altceva :
returnează x * factorial ( x - 1 )
La început acest mod de a indica blocuri și de a exprima sintaxa poate confunda ideile celor care provin din alte limbi, dar apoi se dovedește a fi foarte avantajos, deoarece este concis și obligă să scrie surse corect indentate, crescând astfel lizibilitatea cod.
Dezavantajul este că gestionarea spațiilor și a caracterelor filelor poate fi diferită de la un editor de text la altul, ceea ce vă obligă să acordați o atenție deosebită indentării codului sau să vă bazați pe funcțiile de indentare automată prezente acum în majoritatea editorilor de programe. Se poate întâmpla, de asemenea, să lucrați cu diferiți editori de cod sursă, pe diferite computere și, astfel, să ajungeți la cod sursă care folosește file și spații într-un mod mixt, observând eroarea doar în timpul rulării.
Python permite, de asemenea, unor comenzi rapide să scrie cod „multiplu” pe aceeași linie. Dacă colonul (:) începe un bloc indentat de o singură linie: îl putem muta urmând un spațiu mai târziu.
dacă b > a : print ( "b este mai mare decât a" )
Deși nu este foarte bun pentru puriștii limbajului Python, este totuși posibil să folosiți „punct și virgula” (;) ca în majoritatea limbajelor de programare pentru a indica că o instrucțiune este terminată și pentru a începe alta pe aceeași linie.
a = b + 10 ; print ( „Hello world” ); b = 243 - 23 ;
Programare funcțională și sintaxă avansată
Acest articol sau secțiune referitoare la informatică este considerat a fi verificat . |
Un alt punct forte al Python este disponibilitatea elementelor care facilitează programarea funcțională . Funcțiile sunt considerate obiecte și, prin urmare, pot fi utilizate ca orice alt obiect, de exemplu prin inserarea lor în colecții sau folosirea lor direct ca parametri pentru alte funcții. Elementele funcționale de programare, împreună cu construcțiile specifice pentru manipularea containerelor, fac și mai convenabil lucrul cu liste sau alte tipuri de containere.
Slicings sunt o construcție asemănătoare indexării capabile să obțină subsecvențe prin specificarea indicilor de început, sfârșit și „pas”.
numere = [ 1 , 2 , 3 , 4 , 5 ]
even_numbers = numbers [ 1 :: 2 ] # exemplu de feliere
Înțelegerea listei este o construcție luată din limbajul funcțional Haskell și permite „completarea” unei liste - folosind o sintaxă specială - așa cum putem vedea în exemplul următor în care sunt calculate primele cinci puteri din două:
numere = [ 1 , 2 , 3 , 4 , 5 ]
powers_of_two = [ 2 ** n pentru n în numere ] # exemplu de înțelegere a listei
Generatoarele , pe de altă parte, sunt obiecte particulare capabile să construiască colecții într-un mod dinamic, utile pentru creșterea eficienței, în special prezența iterațiilor pe un număr mare de elemente. Expresiile generatoare , similare cu înțelegerile listei, sunt un instrument rapid și eficient pentru crearea generatoarelor. Cuvântul cheie randament vă permite să creați generatoare cu o sintaxă foarte asemănătoare cu cea a unei funcții.
Să trecem la câteva exemple; expresie generator :
numere = [ 1 , 2 , 3 , 4 , 5 ]
powers_of_two = ( 2 ** n pentru n în numere ) # generator
Sau, pentru mai mult control, ca o funcție normală, putem folosi cuvântul cheie randament în loc de returnare , pentru a transforma funcția noastră într-un generator. În acest fel, funcția își „salvează” starea și apoi reia executarea codului atunci când valoarea următorului randament este reamintită.
numere = [ 1 , 2 , 3 , 4 , 5 ]
def power_of_two ( numere ):
pentru n în numere :
randament 2 ** n
gen = power_of_two ( numere )
Utilizarea este identică. Se numește următoarea funcție care returnează de fiecare dată o nouă valoare, reluând executarea codului din cuvântul cheie randament . Când valorile sunt terminate, se ridică o excepție StopIterationError . Cu toate acestea, nu este singura modalitate de a interacționa cu generatoarele și puteți urmări datele transmise la randamentul funcției în acest fel:
gen = ( 2 ** n pentru n în intervalul ( 1 , 6 ))
pentru x în gen :
print ( x )
Pentru a crea o listă dintr-un generator, pur și simplu utilizați lista de apeluri (gen):
gen = ( 2 ** n pentru n în intervalul ( 1 , 6 ))
print ( list ( gen ))
Generatoarele sunt preferate listelor, deoarece nu ocupă memorie, deoarece valorile sunt calculate din când în când și nu rămân în memorie. Pentru aceasta este recomandabil să utilizați, de exemplu, xrange (care este un generator) în loc de interval (care returnează o listă) cu numere foarte mari, pentru a asigura o viteză mai mare
De asemenea, este posibil să scrieți expresii if ... else pe o singură linie, care este utilă în combinație cu lambdas (a se vedea mai jos).
import aleatoriu
l = [ 1 , 2 ]
a = aleatoriu . alegere ( l )
print ( 'dreapta!' dacă un 'greșit!' == 1 altceva)
Deoarece Python vă permite să aveți funcții ca argumente , este, de asemenea, posibil să aveți construcții funcționale mai subtile, cum ar fi continuarea . [21] .
În Python există cuvântul cheie lambda
, deosebit de util în contextele în care este necesar să efectuați operații mici care vor fi efectuate probabil numai în acea zonă a codului:
>>> l = [ 1 , 2 , 3 , 4 , 5 ] # sau interval (1,6)
>>> print ( hartă ( lambda x : x + 10 , l ))
[ 11 , 12 , 13 , 14 , 15 ]
Cu toate acestea, această utilizare a hărții este contestată și este preferabil să folosiți listele de înțelegeri:
>>> l = [ 1 , 2 , 3 , 4 , 5 ] # sau interval (1,6)
>>> tipăriți ([ x + 10 pentru x în l ])
[ 11 , 12 , 13 , 14 , 15 ]
Cu toate acestea, blocurile lambda
pot conține doar expresii , nu instrucțiuni . Prin urmare, acestea nu sunt cel mai general mod de a returna o funcție. În schimb, puteți utiliza următoarea tehnică care returnează o funcție al cărei nume este definit într-un domeniu local, adică o închidere :
def multiple_adder ( x , y ):
sumator def ( z ):
returnează z + x + y
return ( x + y + sumator ( x + y )) # ar fi (x + y) * 3
Decoratori
Un decorator este orice obiect invocabil Python folosit pentru a adăuga cod la începutul sau la sfârșitul unei funcții, metode sau definiții de clasă, fără a modifica codul său intern. Un decorator a trecut obiectul și returnează obiectul modificat.
Decoratorii sunt inspirați parțial de notația Java, au o sintaxă similară și sunt considerați zahăr sintactic . Ei folosesc @
ca cuvânt cheie:
@viking_chorus
def menu_item ():
print ( „spam” )
Decoratorii pot fi înlănțuiți prin plasarea mai multor linii adiacente:
@de neinvins
@favorite_color ( „Albastru” )
def black_knight ():
trece
și este echivalent cu:
def black_knight ():
trece
black_knight = invincibil (favorite_color ( "Blue") (black_knight))
Structura standard a decoratorului este:
def favorite_color ( color ):
decorator def ( func ):
wrapper def ():
imprimare ( color )
func ()
înveliș de întoarcere
decorator de întoarcere
Comentarii
La fel ca alte limbaje de programare, în Python puteți lăsa comentarii în linii de cod pentru a înțelege mai bine ce se întâmplă când rulați programul. În Python, comentariile (începând de la primele versiuni ale limbajului de programare) sunt introduse cu simbolul „#” pentru a nu modifica codul.
print ( „ceva aleatoriu” ) #acest program imprimă „ceva aleatoriu” ignorând orice după simbolul „#”
print ( „efectul hash-ului dispare, iar codul afectează programul” )
Tratarea excepțiilor
Python acceptă extensiv și folosește gestionarea excepțiilor ca mijloc de raportare și verificare a condițiilor de eroare, inclusiv excepții aruncate de erori de sintaxă.
Excepțiile permit verificarea erorilor mai concisă și mai fiabilă decât multe alte modalități posibile utilizate în mod obișnuit pentru a raporta erori sau situații anormale. Excepțiile sunt sigure pentru fire ; nu supraîncarcă codul sursă așa cum fac verificările pentru valorile de eroare returnate și pot răspândi cu ușurință stiva de apeluri funcționale atunci când trebuie raportată o eroare la un nivel superior al programului.
Cu gestionarea excepțiilor, verificările preventive sunt înlocuite de un mecanism mai ușor care vă permite să efectuați acțiunea dorită direct și să capturați separat orice excepții care pot apărea. În plus față de gestionarea erorilor, excepții sunt uneori folosite în Python și pentru controlul fluxului: de exemplu, operația de iterație și, în consecință, bucla for,
se bazează pe o semnalizare de excepție.
Biblioteca standard
Python are o bibliotecă standard extinsă, ceea ce îl face potrivit pentru multe utilizări. În plus față de modulele de bibliotecă standard, puteți adăuga altele scrise în C sau Python pentru a vă satisface nevoile specifice. Printre modulele deja disponibile există pentru scrierea aplicațiilor web: MIME , HTTP și toate celelalte standarde de Internet sunt acceptate. De asemenea, sunt disponibile module pentru a crea aplicații cu o interfață grafică, pentru a vă conecta la baze de date relaționale , pentru a utiliza expresii regulate .
Biblioteca standard este unul dintre punctele forte ale Python. De fapt, este compatibil cu toate platformele, cu excepția câtorva funcții, marcate clar în documentație ca fiind specifice unei anumite platforme.
Exemple de programe
Salut Lume!
Următorul exemplu de program Python (versiunea 3.0) tipărește textul „ Bună ziua, lume! ”:
print ( „Bună ziua, lume!” )
Următorul este același program care rulează cu versiunea 2.7 sau anterioară:
tipărește "Bună ziua, lume!"
RGB binar, RGB hexagonal
Următorul exemplu de program Python (versiunea 3.8.5 [22] ) convertește o intrare într-o culoare codificată RGB cu pașii necesari ai procentelor roșu, verde și albastru:
def RGB_bin ():
șir de import
procent1 = intrare ( "roșu ( % d ex):" )
percent2 = input ( "verde ( % d ex):" )
procentaj3 = intrare ( "albastru ( % d ex):" )
print ( "Codarea în RGB a unei culori cu" + str ( percent1 ) + " % o f roșu", + str ( percent2 ) + " % o f verde și" + str ( percent3 ) + " % o f albastru ... " )
print ( str ( percent1 ) + ": 100 = X: 256, deci X =" + str ( procent1 ) + "* 256 / 100." )
X = float (int ( percent1) * 256/100)
print ( str ( percent2 ) + ": 100 = Y: 256, deci Y =" + str ( percent2 ) + "* 256 / 100." )
Y = float (int ( percent2) * 256/100)
print ( str ( percent3 ) + ": 100 = Z: 256, deci Z =" + str ( procent3 ) + "* 256 / 100." )
Z = float (int (procentul3) * 256/100)
X = bin ( int ( X ))
Y = bin ( int ( Y ))
Z = bin ( int ( Z ))
binary_colour = ( str ( X ) + "" + str ( Y ) + "" + str ( Z ))
print ( "Culoare codată prin cifre binare:" + str ( binary_colour [ 2 :]))
def RGB_hex ():
procent1 = intrare ( "roșu ( % d ex):" )
percent2 = input ( "verde ( % d ex):" )
procentaj3 = intrare ( "albastru ( % d ex):" )
print ( „Codificarea în RGB a unei culori cu„ + str ( percent1 ) + „ % o f roșu”, + str ( percent2 ) + „ % o f verde și„ + str ( percent3 ) + „ % o f albastru ... " )
print ( str ( percent1 ) + ": 100 = X: 256, deci X =" + str ( procent1 ) + "* 256 / 100." )
R = float (int ( procent1) * 256/100)
print ( str ( percent2 ) + ": 100 = Y: 256, deci Y =" + str ( percent2 ) + "* 256 / 100." )
G = float (int ( percent2) * 256/100)
print ( str ( percent3 ) + ": 100 = Z: 256, deci Z =" + str ( procent3 ) + "* 256 / 100." )
B = float (int (procentul3) * 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' output del codice sorgente sopra è il seguente:
======== RESTART : D : \ Python \ Python \ Python38 - 32 \ Python3 . 8.5 dal pc \ RGB . py =======
>>> RGB_bin ()
red ( % dex ): 30
green ( % dex ): 40
blue ( % dex ): 20
Coding in RGB a color with 30 % of red , 40 % of green and 20 % of blue ...
30 : 100 = X : 256 , so X = 30 * 256 / 100.
40 : 100 = Y : 256 , so Y = 40 * 256 / 100.
20 : 100 = Z : 256 , so Z = 20 * 256 / 100.
Colour coded by binary digits : 1001100 0b1100110 0b110011
Definizione di una classe
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.
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 [23] .
A partire da Python 3.6, è possibile utilizzare una nuova funzione chiamata "f-strings" [24] . 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.
class Persona ( object ):
# Costruttore della classe
def __init__ ( self , nome , cognome ):
self . nome = nome
self . cognome = cognome
def nome_completo ( self ):
full = f 'Sig. { self . cognome } { self . nome } '
return full
persona = Persona ( 'Mario' , 'Rossi' )
print ( persona . nome_completo ())
L'output presentato sarà il seguente: Sig. Rossi Mario
Note
- ^ Fonte: Copia archiviata , su python.org . URL consultato il 27 ottobre 2009 (archiviato dall' url originale il 17 dicembre 2009) .
- ^ 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. "
- ^ How do I create a .pyc file? , su effbot.org . URL consultato il 28 maggio 2020 .
- ^ Python 3 vs C gcc - Which programs are fastest? | Computer Language Benchmarks Game , su benchmarksgame-team.pages.debian.net . URL consultato il 28 maggio 2020 .
- ^ Psyco - Home Page , su psyco.sourceforge.net . URL consultato il 28 maggio 2020 .
- ^ ( EN ) The PyPy Team, PyPy , su PyPy , 28 dicembre 2019. URL consultato il 28 maggio 2020 .
- ^ ( EN ) Real Python, Python Bindings: Calling C or C++ From Python – Real Python , su realpython.com . URL consultato il 28 maggio 2020 .
- ^ Jython: Python for the Java Platform
- ^ IronPython: the Python programming language for the .NET Framework
- ^ The Python programming language for S60 mobile phones
- ^ PyPy Archiviato il 13 gennaio 2007 in Internet Archive .
- ^ Pagina dove vengono archiviati i file caricati , su Repl.it .
- ^ SL4A su Google Code
- ^ 24.1. turtle — Turtle graphics — Python 3.3.7 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
- ^ 8.17. copy — Shallow and deep copy operations — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
- ^ random — Generate pseudo-random numbers — Python 3.8.3 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
- ^ 28.1. sys — System-specific parameters and functions — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
- ^ 9.4. decimal — Decimal fixed point and floating point arithmetic — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
- ^ 5. Built-in Types — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
- ^ ( EN ) Ereditarietà multipla , su Python ABC . URL consultato il 28 maggio 2020 .
- ^ Continuations Made Simple and Illustrated
- ^ rilascio versione 3.8.5 , su Python.org .
- ^ Un nuovo stile per le classi | Python-it.org # il punto di riferimento italiano per gli appassionati di Python , su python-it.org . URL consultato il 23 giugno 2010 (archiviato dall' url originale il 6 agosto 2010) .
- ^ ( EN ) PEP 498 -- Literal String Interpolation , su Python.org . URL consultato il 23 maggio 2019 .
Bibliografia
- Micha Gorelick, Ian Ozsvald, Python alla massima potenza. Programmazione pratica ad alte prestazioni , Milano, Hoepli, 2015, p. 376, ISBN 9788820367015 .
- Mark Lutz, Imparare Python , Milano, Tecniche Nuove, 2011, p. 1097, ISBN 9788848125956 .
- ( EN ) Luciano Ramalho, Fluent Python: Clear, Concise, and Effective Programming , O'Reilly Media, 2015, p. 792, ISBN 9781491946008 .
Voci correlate
Altri progetti
- Wikibooks contiene testi o manuali su Python
- Wikimedia Commons contiene immagini o altri file su Python
Collegamenti esterni
- ( EN ) Sito ufficiale , su python.org .
- ( EN ) Python , su GitHub .
- Repository sorgenti di Python , su github.com .
- Sito di segnalazione bug , su bugs.python.org .
- ( EN ) Documentazione ufficiale , su python.org .
- Documentazione italiana , su python.it .
- Python.it - Sito italiano dedicato alla programmazione in Python
- Pensare da informatico Introduzione alla programmazione attraverso Python
- Guida di Python , su python.it .
- PyCon Italia , su pycon.it . - Sito della conferenza italiana ufficiale su Python
Controllo di autorità | LCCN ( EN ) sh96008834 · GND ( DE ) 4434275-5 · BNF ( FR ) cb13560465c (data) |
---|