Piton

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă căutați alte semnificații, consultați Python (dezambiguizare) .
Piton
limbaj de programare
Logo Python și wordmark.svg
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

Codul sursă al unui program scris în Python
Exemplu de cod sursă scris în Python

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

Meniul derulant din care puteți rula programul făcând clic pe „Rulați modulul” sau cu comanda rapidă F5 de la Windows 10 în continuare.

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.

Exemplu de coduri sursă scrise cu Python IDLE 3.8.5

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:

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

Exemplu de ieșire a unui program scris cu biblioteca de broaște țestoase.

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ă

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

  1. ^ Fonte: Copia archiviata , su python.org . URL consultato il 27 ottobre 2009 (archiviato dall' url originale il 17 dicembre 2009) .
  2. ^ 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. "
  3. ^ How do I create a .pyc file? , su effbot.org . URL consultato il 28 maggio 2020 .
  4. ^ 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 .
  5. ^ Psyco - Home Page , su psyco.sourceforge.net . URL consultato il 28 maggio 2020 .
  6. ^ ( EN ) The PyPy Team, PyPy , su PyPy , 28 dicembre 2019. URL consultato il 28 maggio 2020 .
  7. ^ ( EN ) Real Python, Python Bindings: Calling C or C++ From Python – Real Python , su realpython.com . URL consultato il 28 maggio 2020 .
  8. ^ Jython: Python for the Java Platform
  9. ^ IronPython: the Python programming language for the .NET Framework
  10. ^ The Python programming language for S60 mobile phones
  11. ^ PyPy Archiviato il 13 gennaio 2007 in Internet Archive .
  12. ^ Pagina dove vengono archiviati i file caricati , su Repl.it .
  13. ^ SL4A su Google Code
  14. ^ 24.1. turtle — Turtle graphics — Python 3.3.7 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  15. ^ 8.17. copy — Shallow and deep copy operations — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  16. ^ random — Generate pseudo-random numbers — Python 3.8.3 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  17. ^ 28.1. sys — System-specific parameters and functions — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  18. ^ 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 .
  19. ^ 5. Built-in Types — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  20. ^ ( EN ) Ereditarietà multipla , su Python ABC . URL consultato il 28 maggio 2020 .
  21. ^ Continuations Made Simple and Illustrated
  22. ^ rilascio versione 3.8.5 , su Python.org .
  23. ^ 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) .
  24. ^ ( 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

Collegamenti esterni

Controllo di autorità LCCN ( EN ) sh96008834 · GND ( DE ) 4434275-5 · BNF ( FR ) cb13560465c (data)
Software libero Portale Software libero : accedi alle voci di Wikipedia che trattano di software libero