Python (limbaj de programare) - Python (programming language)

Piton
Python-logo-notext.svg
Paradigmă Multi-paradigmă : orientată pe obiecte , procedurală ( imperativă ), funcțională , structurată , reflexivă
Proiectat de Guido van Rossum
Dezvoltator Fundația Python Software
A apărut prima dată 20 februarie 1991 ; acum 30 de ani ( 20-02 1991 )
Versiune stabila
3.10.0  Editați acest lucru pe Wikidata / 4 octombrie 2021 ; Acum 15 zile ( 4 octombrie 2021 )
Previzualizare lansare
3.11.0a1  Editați acest lucru pe Wikidata / 7 octombrie 2021 ; Acum 12 zile ( 7 octombrie 2021 )
Disciplina de tastare Duck , dinamic , puternic de tastare ; gradual (de la 3.5, dar ignorat în CPython )
OS Windows , Linux / UNIX , macOS și multe altele
Licență Licența Python Software Foundation
Extensii de nume de fișier .py, .pyi, .pyc, .pyd, .pyo (înainte de 3.5), .pyw, .pyz (începând cu 3.5)
Site-ul web www .python .org
Implementări majore
CPython , PyPy , Stackless Python , MicroPython , CircuitPython , IronPython , Jython
Dialecte
Cython , RPython , Starlark
Influențată de
ABC , Ada , ALGOL 68 , APL , C , C ++ , CLU , Dylan , Haskell , Icon , Java , Lisp , Modula-3 , Perl , Standard ML
Influențat
Apache Groovy , Boo , Cobra , CoffeeScript , D , F # , Genie , Go , JavaScript , Julia , Nim , Ring, Ruby , Swift

Python este un limbaj de programare de nivel general interpretat la nivel înalt . Filozofia sa de proiectare subliniază lizibilitatea codului prin utilizarea unei indentări semnificative . Construcțiile sale de limbaj , precum și abordarea orientată pe obiecte , au scopul de a ajuta programatorii să scrie coduri clare și logice pentru proiecte la scară mică și mare.

Python este tastat dinamic și colectat gunoi . Suportă mai multe paradigme de programare , inclusiv programarea structurată (în special, procedurală ), orientată obiect și funcțională . Este deseori descris ca un limbaj „inclus cu baterii” datorită bibliotecii sale standard complete .

Guido van Rossum a început să lucreze la Python la sfârșitul anilor 1980, ca succesor al limbajului de programare ABC și l-a lansat pentru prima dată în 1991 sub numele de Python 0.9.0. Python 2.0 a fost lansat în 2000 și a introdus noi caracteristici, cum ar fi înțelegerile listelor și un sistem de colectare a gunoiului folosind numărarea referințelor . Python 3.0 a fost lansat în 2008 și a fost o revizuire majoră a limbajului care nu este complet compatibilă cu versiunile anterioare . Python 2 a fost întrerupt cu versiunea 2.7.18 în 2020.

Python se clasează în mod constant ca unul dintre cele mai populare limbaje de programare.

Istorie

Designerul Python, Guido van Rossum , la OSCON 2006

Python a fost conceput la sfârșitul anilor 1980 de Guido van Rossum la Centrum Wiskunde & Informatica (CWI) din Olanda ca un succesor al limbajului de programare ABC , care a fost inspirat de SETL , capabil să gestioneze excepțiile și să interfețe cu sistemul de operare Amoeba . Implementarea acestuia a început în decembrie 1989. Van Rossum și-a asumat responsabilitatea exclusivă pentru proiect, în calitate de dezvoltator principal, până la 12 iulie 2018, când și-a anunțat „vacanța permanentă” din responsabilitățile sale ca „ Benedicent Dictator For Life ” al Python, un titlu Python. comunitatea i-a acordat să-și reflecte angajamentul pe termen lung ca principal factor de decizie al proiectului. În ianuarie 2019, dezvoltatorii activi Python au ales un „Consiliu director” format din cinci membri pentru a conduce proiectul.

Python 2.0 a fost lansat pe 16 octombrie 2000, cu multe caracteristici noi majore, inclusiv un colector de gunoi care detectează ciclul și suport pentru Unicode .

Python 3.0 a fost lansat pe 3 decembrie 2008. A fost o revizuire majoră a limbajului care nu este complet compatibilă cu versiunile anterioare . Multe dintre caracteristicile sale majore au fost backportate la versiunile Python 2.6.x și 2.7.x versiune. Lansările Python 3 includ 2to3utilitarul, care automatizează traducerea codului Python 2 în Python 3.

Data de sfârșit de viață a Python 2.7 a fost stabilită inițial în 2015, apoi amânată până în 2020, din cauza îngrijorării că un corp mare de coduri existente nu ar putea fi ușor portat în Python 3. Nu vor mai fi lansate patch-uri de securitate sau alte îmbunătățiri pentru aceasta. Cu sfârșitul duratei de viață a Python 2 , doar Python 3.6.x și versiunile ulterioare sunt acceptate.

Python 3.9.2 și 3.8.8 au fost accelerate deoarece toate versiunile Python (inclusiv 2.7) au avut probleme de securitate, ceea ce a dus la o posibilă execuție de cod la distanță și otrăvirea cache-ului web .

Filozofie și caracteristici de proiectare

Python este un limbaj de programare multi-paradigmă . Programarea orientată pe obiecte și programarea structurată sunt pe deplin acceptate, iar multe dintre caracteristicile sale acceptă programarea funcțională și programarea orientată pe aspect (inclusiv prin metaprogramare și metaobiecte (metode magice)). Multe alte paradigme sunt acceptate prin intermediul extensiilor, inclusiv proiectarea prin contract și programarea logică .

Python utilizează tastarea dinamică și o combinație de numărare a referințelor și un colector de gunoi care detectează ciclul pentru gestionarea memoriei . De asemenea, oferă rezoluție dinamică a numelui ( legare târzie ), care leagă numele metodelor și variabilelor în timpul executării programului.

Designul Python oferă un anumit suport pentru programarea funcțională în tradiția Lisp . Ea are filter, mapși reducefuncții; listă înțelegeri , dicționare , seturi și expresii generatoare . Biblioteca standard are două module ( itertoolsși functools) care implementează instrumente funcționale împrumutate de la Haskell și Standard ML .

Filozofia de bază a limbii este rezumată în documentul Zen Python ( PEP 20 ), care include aforisme , cum ar fi:

  • Frumos este mai bun decât urât.
  • Explicit este mai bun decât implicit.
  • Simplul este mai bun decât complexul.
  • Complexul este mai bine decât complicat.
  • Citibilitatea contează.

În loc să aibă toate funcționalitățile încorporate în nucleul său, Python a fost conceput pentru a fi foarte extensibil (cu module). Această modularitate compactă a făcut-o deosebit de populară ca mijloc de a adăuga interfețe programabile la aplicațiile existente. Viziunea lui Van Rossum despre un limbaj de bază mic, cu o bibliotecă standard mare și un interpret ușor extensibil, a rezultat din frustrările sale față de ABC , care susținea abordarea opusă. Este deseori descris ca un limbaj „inclus cu baterii” datorită bibliotecii sale standard complete .

Python se străduiește să obțină o sintaxă și o gramatică mai simple, mai puțin aglomerate, oferind în același timp dezvoltatorilor o alegere în metodologia lor de codificare. Spre deosebire de motl -ul lui Perlexistă mai mult de o modalitate de a face acest lucru ”, Python îmbrățișează o „ar trebui să existe una - și, de preferință, una singură - modalitate evidentă de a face acest lucru” filosofia de proiectare. Alex Martelli , Fellow la Python Software Foundation și autor de cărți Python, scrie că „A descrie ceva ca„ inteligent ” nu este considerat un compliment în cultura Python”.

Dezvoltatorii Python se străduiesc să evite optimizarea prematură și să respingă patch-uri către părți non-critice ale implementării de referință CPython care ar oferi creșteri marginale ale vitezei cu prețul clarității. Când viteza este importantă, un programator Python poate muta funcții critice în timp în module de extensie scrise în limbi precum C sau poate utiliza PyPy , un compilator just-in-time . Cython este, de asemenea, disponibil, care traduce un script Python în C și efectuează apeluri directe API de nivel C în interpretorul Python.

Dezvoltatorii Python își propun ca limbajul să fie distractiv de folosit. Acest lucru se reflectă în numele său - un tribut adus grupului de comedie britanic Monty Python - și în abordări ocazional ludice la tutoriale și materiale de referință, cum ar fi exemple care se referă la spam și ouă (o referință la o schiță Monty Python ) în loc de standard foo și bar .

Un neologism comun în comunitatea Python este pythonic , care poate avea o gamă largă de semnificații legate de stilul programului. A spune că codul este pitonic înseamnă a spune că folosește bine limbajele Python, că este natural sau arată fluență în limbaj, că este în conformitate cu filosofia minimalistă a Python și cu accentul pe lizibilitate. În schimb, codul care este greu de înțeles sau citește ca o transcriere brută dintr-un alt limbaj de programare se numește unpitonic .

Utilizatorii și admiratorii Python, în special cei considerați cunoscuți sau cu experiență, sunt adesea denumiți Pythonistas .

Sintaxă și semantică

Python este menit să fie un limbaj ușor de citit. Formatarea sa este vizuală, și folosește adesea cuvinte cheie în limba engleză, unde alte limbi folosesc punctuația. Spre deosebire de multe alte limbi, nu folosește paranteze cretate pentru a delimita blocuri, iar punctele și virgulele după instrucțiuni sunt permise, dar sunt rareori folosite, dacă este vreodată. Are mai puține excepții sintactice și cazuri speciale decât C sau Pascal .

Indentare

Python folosește indentarea spațiului alb , mai degrabă decât parantezele sau cuvintele cheie, pentru a delimita blocurile . O creștere a indentării vine după anumite afirmații; o scădere a indentării semnifică sfârșitul blocului curent. Astfel, structura vizuală a programului reprezintă cu precizie structura semantică a programului. Această caracteristică este uneori denumită regula off-side , pe care o împărtășesc și alte limbi, dar în majoritatea limbilor indentarea nu are nici o semnificație semantică. Mărimea recomandată a indentării este de patru spații.

Declarații și flux de control

Declarațiile Python includ (printre altele):

  • Declarația de atribuire , utilizând un singur semn egal =.
  • ifDeclarația, care se execută în mod condiționat un bloc de cod, împreună cu elseși elif(o contracție de-altfel , dacă).
  • Instrucțiunea for, care iterează peste un obiect iterabil, capturând fiecare element într-o variabilă locală pentru utilizare de către blocul atașat.
  • whileDeclarația, care execută un bloc de cod , atâta timp cât starea sa este adevărată.
  • tryDeclarația, care permite excepții ridicate în blocul său de cod atașat să fie prins și manipulate de exceptclauze; de asemenea, se asigură că codul de curățare dintr-un finallybloc va fi întotdeauna rulat, indiferent de modul în care iese blocul.
  • raiseDeclarația, utilizată pentru a ridica o excepție specificată sau re-raise o excepție prins.
  • Instrucțiunea class, care execută un bloc de cod și își atașează spațiul de nume local unei clase , pentru utilizare în programarea orientată obiect.
  • Instrucțiunea def, care definește o funcție sau o metodă .
  • withDeclarația, care cuprinde un bloc de cod într - un manager de context (de exemplu, achiziționarea unui blocare înainte de blocul de cod este rulat și eliberarea de blocare după aceea, sau deschiderea unui fișier și apoi închiderea acestuia), permițând resurselor achiziție-este-initializare (RAII), ca un comportament asemănător și înlocuiește o limbă comună try / în cele din urmă.
  • breakDeclarația, iese dintr - o buclă.
  • continueDeclarație, sare peste această repetare și continuă cu elementul următor.
  • Instrucțiunea delelimină o variabilă, ceea ce înseamnă că referința de la nume la valoare este ștearsă și încercarea de a utiliza acea variabilă va provoca o eroare. O variabilă ștearsă poate fi realocată.
  • passDeclarația, care servește ca un NOP . Este necesar din punct de vedere sintactic pentru a crea un bloc de cod gol.
  • assertDeclarație, utilizat în timpul de depanare pentru a verifica condițiile care ar trebui să se aplice.
  • Instrucțiunea yield, care returnează o valoare dintr-o funcție generator și yieldeste, de asemenea, un operator. Acest formular este utilizat pentru implementarea coroutinelor .
  • Instrucțiunea return, utilizată pentru a returna o valoare dintr-o funcție.
  • Instrucțiunea import, care este utilizată pentru a importa module ale căror funcții sau variabile pot fi utilizate în programul curent.

Declarația de atribuire ( =) funcționează prin legarea unui nume ca referință la un obiect separat, alocat dinamic . Variabilele pot fi ulterior recuperate în orice moment la orice obiect. În Python, un nume de variabilă este un deținător de referință generic și nu are un tip de date fix asociat cu acesta. Cu toate acestea, la un moment dat, o variabilă se va referi la un obiect, care va avea un tip. Aceasta este denumită tipare dinamică și este contrastată cu limbaje de programare tipizate static , unde fiecare variabilă poate conține doar valori de un anumit tip.

Python nu acceptă optimizarea apelurilor de coadă sau continuări de primă clasă și, potrivit lui Guido van Rossum, nu o va face niciodată. Cu toate acestea, este oferit un suport mai bun pentru funcționalitatea asemănătoare coroutinei , prin extinderea generatoarelor Python . Înainte de 2,5, generatoarele erau iteratoare leneșe ; informațiile au fost transmise unidirecțional din generator. Din Python 2.5, este posibilă trecerea informațiilor înapoi într-o funcție generator, iar din Python 3.3, informațiile pot fi transmise prin mai multe niveluri de stivă.

Expresii

Unele expresii Python sunt similare cu cele găsite în limbaje precum C și Java , în timp ce altele nu sunt:

  • Adunarea, scăderea și multiplicarea sunt aceleași, dar comportamentul diviziunii diferă. Există două tipuri de diviziuni în Python. Acestea sunt divizarea etajului (sau divizarea întregului) //și diviziunea în virgulă mobilă /. Python folosește, de asemenea, **operatorul pentru exponențiere.
  • Din Python 3.5, a @fost introdus noul operator infix. Este destinat să fie utilizat de biblioteci precum NumPy pentru multiplicarea matricii .
  • Din Python 3.8, a :=fost introdusă sintaxa , numită „operator morsă”. Atribuie valori variabilelor ca parte a unei expresii mai mari.
  • În Python, se ==compară după valoare, comparativ cu Java, care compară numeric după valoare și obiecte prin referință. (Compararea valorilor în Java pe obiecte poate fi efectuată cu equals()metoda.) isOperatorul Python poate fi folosit pentru a compara identitățile obiectelor (comparație prin referință). În Python, comparațiile pot fi înlănțuite, de exemplu .a <= b <= c
  • Python folosește cuvintele and, or, notpentru operatorii săi Boolean , mai degrabă decât simbolic &&, ||, !utilizat în Java și C.
  • Python are un tip de expresie denumit o listă de înțelegere , precum și o expresie mai generală numită o expresie generator .
  • Funcțiile anonime sunt implementate folosind expresii lambda ; totuși, acestea sunt limitate prin faptul că corpul nu poate fi decât o singură expresie.
  • Expresiile condiționale din Python sunt scrise ca (diferite în ordinea operanzilor de la operator comun la multe alte limbi).x if c else yc ? x : y
  • Python face o distincție între liste și tupluri . Listele sunt scrise ca , sunt modificabile și nu pot fi folosite ca chei ale dicționarelor (cheile de dicționar trebuie să fie imuabile în Python). Tuplurile sunt scrise ca , sunt imuabile și astfel pot fi folosite ca chei ale dicționarelor, cu condiția ca toate elementele tuplului să fie imuabile. Operatorul poate fi folosit pentru a concatena două tupluri, care nu modifică în mod direct conținutul lor, ci mai degrabă produce un nou tuplu care conține elementele ambelor tuple furnizate. Astfel, având în vedere variabila inițial egală cu , executarea mai întâi evaluează , care cedează , care este apoi atribuită înapoi , astfel modificând în mod eficient conținutul , în timp ce se conformează naturii imuabile a obiectelor tuplu. Parantezele sunt opționale pentru tupluri în contexte neechivoce.[1, 2, 3](1, 2, 3)+t(1, 2, 3)t = t + (4, 5)t + (4, 5)(1, 2, 3, 4, 5)tt
  • Python prezintă despachetarea secvenței în care mai multe expresii, fiecare evaluând orice poate fi atribuit (o variabilă, o proprietate care se poate scrie, etc.), sunt asociate în mod identic cu cele care formează literalele tuplului și, în ansamblu, sunt puse pe partea stângă a semnului egal într-o declarație de atribuire. Instrucțiunea se așteaptă la un obiect iterabil în partea dreaptă a semnului egal care produce același număr de valori ca și expresiile înscrise furnizate atunci când este iterat și va itera prin acesta, atribuind fiecare dintre valorile produse expresiei corespunzătoare din stânga .
  • Python are un operator „format de șir” %. Aceasta funcționează în mod analog cu printfformatarea șirurilor în C, de exemplu, se evaluează la . În Python 3 și 2.6+, acest lucru a fost completat de metoda clasei, de ex . Python 3.6 a adăugat "f-siruri": ."spam=%s eggs=%d" % ("blah", 2)"spam=blah eggs=2"format()str"spam={0} eggs={1}".format("blah", 2)blah = "blah"; eggs = 2; f'spam={blah} eggs={eggs}'
  • Șirurile din Python pot fi concatenate , prin „adăugarea” lor (același operator ca și pentru adăugarea de numere întregi și flotante). De exemplu, se întoarce . Chiar dacă șirurile dvs. conțin numere, ele sunt adăugate în continuare ca șiruri mai degrabă decât ca numere întregi. De exemplu, se întoarce ."spam" + "eggs""spameggs""2" + "2""22"
  • Python are diferite tipuri de litere șir :
    • Șiruri delimitate de ghilimele simple sau duble. Spre deosebire de shell-urile Unix , limbile influențate de Perl și Perl, ghilimelele unice și ghilimele duble funcționează identic. Ambele tipuri de șiruri folosesc backslash ( \) ca un caracter de evacuare . Interpolarea șirurilor a devenit disponibilă în Python 3.6 ca „litere șiruri formatate”.
    • Șiruri de citate triple, care încep și se termină cu o serie de trei ghilimele simple sau duble. Acestea pot acoperi mai multe linii și pot funcționa ca documentele de aici din shell, Perl și Ruby .
    • Soiuri de șiruri brute , notate prin prefixarea literalului șirului cu un r. Secvențele de evadare nu sunt interpretate; prin urmare, șirurile brute sunt utile acolo unde sunt frecvente backslash-uri literale, cum ar fi expresiile regulate și căile în stil Windows . Comparați „ @-citat” în C # .
  • Python are index de matrice și felierea matrice expresii pe liste, notate a[key], sau . Indexurile sunt bazate pe zero , iar indicii negativi sunt relativ la final. Feliile iau elemente de la indexul de pornire până la, dar nu includ, indexul de oprire . Al treilea parametru felie, numit pas sau pas , permite elementelor să fie omise și inversate. Indexurile de felii pot fi omise, de exemplu returnează o copie a întregii liste. Fiecare element al unei felii este o copie superficială .a[start:stop]a[start:stop:step]a[:]

În Python, o distincție între expresii și afirmații este aplicată rigid, spre deosebire de limbi precum Common Lisp , Scheme sau Ruby . Acest lucru duce la duplicarea unor funcționalități. De exemplu:

  • Înțelegeri de listă vs. for-bucle
  • Expresii condiționale vs. ifblocuri
  • Funcțiile eval()vs. exec()încorporate (în Python 2, execeste o declarație); primul este pentru expresii, cel din urmă este pentru enunțuri.

Enunțurile nu pot face parte dintr-o expresie, deci lista și alte înțelegeri sau expresii lambda , toate fiind expresii, nu pot conține declarații. Un caz particular este că o declarație de atribuire, cum ar fi, nu poate face parte din expresia condiționată a unei instrucțiuni condiționate. Aceasta are avantajul de a evita o eroare clasică C de a greși un operator de atribuire pentru un operator de egalitate în condiții: este cod sintactic valid (dar probabil neintenționat) C, dar provoacă o eroare de sintaxă în Python. a = 1===if (c = 1) { ... }if c = 1: ...

Metode

Metodele pe obiecte sunt funcții atașate clasei obiectului; sintaxa este, pentru metode și funcții normale, zahăr sintactic pentru . Metodele Python au un parametru explicit pentru a accesa datele instanței , spre deosebire de sinele implicit (sau ) din alte limbaje de programare orientate pe obiecte (de exemplu, C ++ , Java, Objective-C sau Ruby ). În afară de aceasta, Python oferă și metode, adesea numite metode dunder (datorită numelor lor care încep și se termină cu puncte de subliniere duble), pentru a permite claselor definite de utilizator să modifice modul în care sunt tratate de operații native, cum ar fi lungimea, comparația, în aritmetică operații, conversie de tip și multe altele. instance.method(argument)Class.method(instance, argument)selfthis

Tastare

Ierarhia de tip standard în Python 3

Python folosește tastarea rață și are obiecte tastate, dar nume de variabile netipate. Constrângerile de tip nu sunt verificate la compilare ; mai degrabă, operațiile asupra unui obiect pot eșua, ceea ce înseamnă că obiectul dat nu este de un tip adecvat. În ciuda faptului că este tastat dinamic , Python este puternic tastat , interzicând operațiunile care nu sunt bine definite (de exemplu, adăugând un număr într-un șir), mai degrabă decât încercând în tăcere să le dea sens.

Python permite programatorilor să-și definească propriile tipuri folosind clase , care sunt cele mai des utilizate pentru programarea orientată pe obiecte . Noi instanțe de clase sunt construite apelând clasa (de exemplu, sau ), iar clasele sunt instanțe ale metaclasei (ea însăși o instanță a ei înșiși), permițând metaprogramarea și reflectarea . SpamClass()EggsClass() type

Înainte de versiunea 3.0, Python a avut două tipuri de clase: stil vechi și nou stil . Sintaxa ambelor stiluri este aceeași, diferența fiind dacă clasa objecteste moștenită de la, direct sau indirect (toate clasele de stil nou moștenesc objectși sunt instanțe ale type). În versiunile Python 2 de la Python 2.2 și mai departe, pot fi utilizate ambele tipuri de clase. Clasele în stil vechi au fost eliminate în Python 3.0.

Planul pe termen lung este de a sprijini tastarea treptată și din Python 3.5, sintaxa limbajului permite specificarea tipurilor statice, dar acestea nu sunt verificate în implementarea implicită, CPython . Un verificator de tip static opțional experimental numit mypy acceptă verificarea tipului în timp de compilare.

Rezumatul tipurilor încorporate Python 3
Tip Mutabilitate Descriere Exemple de sintaxă
bool imuabil Valoare booleană True
False
bytearray mutabil Secvența de octeți bytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])
bytes imuabil Secvența de octeți b'Some ASCII'
b"Some ASCII"
bytes([119, 105, 107, 105])
complex imuabil Număr complex cu părți reale și imaginare 3+2.7j
3 + 2.7j
dict mutabil Matrice asociativă (sau dicționar) de perechi de chei și valori; poate conține tipuri mixte (chei și valori), cheile trebuie să fie de tip hashable {'key1': 1.0, 3: False}
{}
ellipsis imuabil Un substituent de puncte de suspensie pentru a fi utilizat ca index în matricele NumPy ...
Ellipsis
float imuabil Număr cu virgulă mobilă de precizie dublă . Precizia este dependentă de mașină, dar în practică este în general implementată ca un număr IEEE 754 pe 64 de biți cu 53 de biți de precizie.

1.33333

frozenset imuabil Set neordonat , nu conține duplicate; poate conține tipuri mixte, dacă este lavabil frozenset([4.0, 'string', True])
int imuabil Întreg de magnitudine nelimitată 42
list mutabil Listă , poate conține tipuri mixte [4.0, 'string', True]
[]
NoneType imuabil Un obiect care reprezintă absența unei valori, adesea numit nul în alte limbi None
NotImplementedType imuabil Un substituent care poate fi returnat de la operatori supraîncărcați pentru a indica tipurile de operandi neacceptate. NotImplemented
range imuabil O secvență de numere utilizate în mod obișnuit pentru a bucla un număr specific de ori în forbucle range(-1, 10)
range(10, -5, -2)
set mutabil Set neordonat , nu conține duplicate; poate conține tipuri mixte, dacă este lavabil {4.0, 'string', True}
set()
str imuabil Un șir de caractere : secvența punctelor de cod Unicode 'Wikipedia'
"Wikipedia"
"""Spanning
multiple
lines"""
tuple imuabil Poate conține tipuri mixte (4.0, 'string', True)
('single element',)
()

^ a Nu este accesibil direct pe nume

Operatii aritmetice

Python are simbolurile obișnuite pentru operatorii aritmetici ( +, -, *, /), operatorul de diviziune podea //și Modulo % ( în cazul în care restul poate fi negativ, de exemplu 4 % -3 == -2). Ea are , de asemenea , **pentru exponentiala , de exemplu , 5**3 == 125și 9**0.5 == 3.0, și un operator de matrice-multiplicare @. Acești operatori funcționează ca în matematica tradițională; cu aceleași reguli de prioritate , operatorii infixează ( +și -pot fi, de asemenea, unari pentru a reprezenta numere pozitive și, respectiv, negative).

Împărțirea între numere întregi produce rezultate în virgulă mobilă. Comportamentul diviziunii s-a schimbat semnificativ în timp:

  • Python curent (adică de la 3.0) s- /a schimbat pentru a fi întotdeauna diviziune în virgulă mobilă, de ex .5/2 == 2.5
  • Python 2.2 a schimbat diviziunea întregi pentru a rotunji spre infinit negativ, de exemplu 7/3 == 2și -7/3 == -3. A //fost introdus operatorul diviziei de podea . Deci 7//3 == 2, -7//3 == -3, 7.5//3 == 2.0și -7.5//3 == -3.0. Adăugarea face ca un modul să utilizeze regulile Python 3.0 pentru divizare (vezi următorul).from __future__ import division
  • Python 2.1 și versiunile anterioare au folosit comportamentul diviziunii lui C. /Operatorul este număr întreg de divizare , dacă ambii operanzi sunt numere întregi, și în virgulă mobilă diviziune în alt mod. Împărțirea întregului se rotunde spre 0, de exemplu și .7/3 == 2-7/3 == -2

În termeni Python, /este diviziunea adevărată (sau pur și simplu diviziunea ) și //este divizarea etajului. /înainte de versiunea 3.0 este o divizie clasică .

Rotunjirea către infinit negativ, deși diferită de majoritatea limbilor, adaugă consistență. De exemplu, înseamnă că ecuația este întotdeauna adevărată. De asemenea, înseamnă că ecuația este valabilă atât pentru valorile pozitive, cât și pentru cele negative ale . Cu toate acestea, menținerea validității acestei ecuații înseamnă că, deși rezultatul lui este, așa cum era de așteptat, în intervalul semi-deschis [0, b ), unde este un număr întreg pozitiv, acesta trebuie să se afle în intervalul ( b , 0] când este negativ. (a + b)//b == a//b + 1b*(a//b) + a%b == aaa%bbb

Python oferă o roundfuncție pentru rotunjirea unui float la cel mai apropiat număr întreg. Pentru eliminarea egalității , Python 3 folosește rotunjire la egal : round(1.5)și round(2.5)ambele produc 2. Versiuni anterioare 3 utilizate round-away-from-zero : round(0.5)is 1.0, round(-0.5)is −1.0.

Python permite expresii booleene cu relații multiple de egalitate într-un mod care este în concordanță cu utilizarea generală în matematică. De exemplu, expresia a < b < ctestează dacă aeste mai mic bsau bmai mic decât c. Limbajele derivate din C interpretează această expresie diferit: în C, expresia ar evalua mai întâi a < b, rezultând 0 sau 1, iar acel rezultat ar fi apoi comparat cu c.

Python folosește aritmetica de precizie arbitrară pentru toate operațiile întregi. DecimalTip / clasa din decimalmodulul oferă zecimale numere în virgulă mobilă la o precizie arbitrară de pre-definite și mai multe moduri de rotunjire. FractionClasa din fractionsmodulul oferă o precizie arbitrară pentru numere raționale .

Datorită bibliotecii extinse de matematică a Python și a bibliotecii terță parte NumPy care extinde în continuare capacitățile native, este frecvent utilizată ca limbaj de scriptare științifică pentru a ajuta în probleme precum prelucrarea și manipularea numerică a datelor.

Exemple de programare

Programul Hello World :

print('Hello, world!')

Program pentru a calcula factorialul unui număr întreg pozitiv:

n = int(input('Type a number, and its factorial will be printed: '))

if n < 0:
    raise ValueError('You must enter a non-negative integer')

factorial = 1
for i in range(2, n + 1):
    factorial *= i

print(factorial)

Biblioteci

Marea bibliotecă standard Python, citată în mod obișnuit ca unul dintre cele mai mari puncte forte, oferă instrumente potrivite pentru multe sarcini. Pentru aplicațiile orientate spre internet, sunt acceptate multe formate și protocoale standard, cum ar fi MIME și HTTP . Include module pentru crearea de interfețe grafice de utilizator , conectarea la baze de date relaționale , generarea de numere pseudorandom , aritmetica cu zecimale de precizie arbitrară, manipularea expresiilor regulate și testarea unității .

Unele părți ale bibliotecii standard sunt acoperite de specificații (de exemplu, implementarea interfeței serverului Web Server (WSGI) wsgirefurmează PEP 333), dar majoritatea modulelor nu sunt. Acestea sunt specificate prin codul lor, documentația internă și suitele de testare . Cu toate acestea, deoarece majoritatea bibliotecii standard este cod Python multiplataforma, doar câteva module necesită modificări sau rescrieri pentru implementările variante.

Începând cu septembrie 2021, Python Package Index (PyPI), depozitul oficial pentru software-ul terț Python, conține peste 329.000 de pachete cu o gamă largă de funcționalități, inclusiv:

Medii de dezvoltare

Majoritatea implementărilor Python (inclusiv CPython) includ o buclă de citire-evaluare-imprimare (REPL), permițându-le să funcționeze ca un interpret de linie de comandă pentru care utilizatorul introduce instrucțiuni secvențial și primește rezultate imediat.

Alte shell-uri, inclusiv IDLE și IPython , adaugă abilități suplimentare, cum ar fi îmbunătățirea completării automate, păstrarea stării sesiunii și evidențierea sintaxei .

Pe lângă mediile standard de dezvoltare integrate pentru desktop , există IDE bazate pe browserul web ; SageMath (destinat dezvoltării programelor Python legate de știință și matematică); PythonAnywhere , un IDE și un mediu de găzduire bazat pe browser; și Canopy IDE, un IDE comercial Python care pune accentul pe calculul științific .

Implementări

Implementare referință

CPython este implementarea de referință a Python. Este scris în C, îndeplinind standardul C89 cu mai multe caracteristici selectate C99 (cu versiunile C ulterioare scoase, este considerat învechit; CPython include propriile extensii C, dar extensiile de la terțe părți nu sunt limitate la versiunile C mai vechi, pot fi de exemplu implementate cu C11 sau C ++). Compilează programele Python într-un bytecode intermediar care este apoi executat de mașina sa virtuală . CPython este distribuit cu o mare bibliotecă standard scrisă într-un amestec de C și Python nativ. Este disponibil pentru multe platforme, inclusiv pentru Windows (începând cu Python 3.9, programul de instalare Python nu reușește să instaleze în mod deliberat pe Windows 7 și 8; Windows XP a fost acceptat până la Python 3.5) și cele mai moderne sisteme de tip Unix , inclusiv macOS (și Apple M1 Mac-uri, de la Python 3.9.1, cu instalator experimental) și suport neoficial pentru, de exemplu, VMS . Portabilitatea platformei a fost una dintre primele sale priorități, în perioada Python 1 și Python 2, chiar și OS / 2 și Solaris au fost acceptate; de atunci a fost renunțat la asistență pentru multe platforme.

Alte implementări

  • PyPy este un interpret rapid, conform Python 2.7 și 3.6. Compilatorul său just-in-time aduce o îmbunătățire semnificativă a vitezei față de CPython, dar mai multe biblioteci scrise în C nu pot fi utilizate cu acesta.
  • Stackless Python este o furcă semnificativă a CPython care implementează microfile ; nu folosește stiva de apeluri în același mod, permițând astfel programe concurente masive. PyPy are, de asemenea, o versiune fără stive.
  • MicroPython și CircuitPython sunt variante Python 3 optimizate pentru microcontrolere , inclusiv Lego Mindstorms EV3 .
  • Pyston este o variantă a runtime-ului Python care folosește compilarea just-in-time pentru a accelera executarea programelor Python.
  • Cinder este o bifurcație orientată spre performanță a CPython 3.8 care conține o serie de optimizări, inclusiv cache inline bytecode, evaluarea dornică a coroutinelor, un JIT metodă la un moment dat și un compilator experimental de bytecode.

Implementări neacceptate

Au fost dezvoltate alte compilatoare Python just-in-time, dar acum nu sunt acceptate:

  • Google a început un proiect numit Unladen Swallow în 2009, cu scopul de a accelera de cinci ori interpretul Python prin utilizarea LLVM și de a-și îmbunătăți capacitatea multithreading de a se scala la mii de nuclee, în timp ce implementările obișnuite suferă de blocarea interpretorului global .
  • Psyco este un compilator specializat care se întrerupe imediat, care se integrează cu CPython și transformă codul secundar în codul mașinii în timpul rulării. Codul emis este specializat pentru anumite tipuri de date și este mai rapid decât codul standard Python. Psyco nu acceptă Python 2.7 sau o versiune ulterioară.
  • PyS60 a fost un interpret Python 2 pentru telefoanele mobile din seria 60 lansat de Nokia în 2005. A implementat multe dintre modulele din biblioteca standard și câteva module suplimentare pentru integrarea cu sistemul de operare Symbian . Nokia N900 acceptă, de asemenea, Python cu biblioteci de widgeturi GTK , permițând scrierea și rularea programelor pe dispozitivul țintă.

Cross-compilatoare în alte limbi

Există mai multe compilatoare de limbaje obiecte de nivel înalt , cu Python nerestricționat, un subset restrâns de Python sau un limbaj similar cu Python ca limbă sursă:

  • Cython compilează (un superset de) Python 2.7 până la C (în timp ce codul rezultat este, de asemenea, utilizabil cu Python 3 și, de asemenea, de exemplu, C ++).
  • Nuitka compilează Python în C ++.
  • Pythran compilează un subset de Python 3 la C ++.
  • Pyrex (cea mai recentă versiune din 2010) și Shed Skin (cea mai recentă versiune din 2013) se compilează în C și, respectiv, în C ++.
  • Google's Grumpy (ultima versiune din 2017) transpune Python 2 to Go .
  • IronPython (acum abandonat de Microsoft) permite rularea programelor Python 2.7 pe .NET Common Language Runtime .
  • Jython compilează Python 2.7 în bytecode Java, permițând utilizarea bibliotecilor Java dintr-un program Python.
  • MyHDL este un limbaj de descriere hardware (HDL) bazat pe Python , care convertește codul MyHDL în cod Verilog sau VHDL .
  • Numba folosește LLVM pentru a compila un subset de Python în codul mașinii.
  • Brython, Transcrypt și Pyjs (cea mai recentă versiune din 2012) compilează Python în JavaScript .
  • RPython poate fi compilat la C și este utilizat pentru a construi interpretul PyPy al Python.

Performanţă

O comparație de performanță a diferitelor implementări Python pe o sarcină de lucru non-numerică (combinatorie) a fost prezentată la EuroSciPy '13. Performanța Python în comparație cu alte limbaje de programare este, de asemenea, comparată cu jocul The Computer Language Benchmarks Game .

Dezvoltare

Dezvoltarea Python se desfășoară în mare parte prin procesul de propunere de îmbunătățire Python (PEP), mecanismul principal pentru propunerea de noi caracteristici majore, colectarea de informații ale comunității asupra problemelor și documentarea deciziilor de proiectare Python. Stilul de codificare Python este acoperit în PEP 8. PEP-urile remarcabile sunt revizuite și comentate de către comunitatea Python și consiliul de conducere.

Îmbunătățirea limbajului corespunde cu dezvoltarea implementării de referință CPython. Lista de corespondență python-dev este forumul principal pentru dezvoltarea limbii. Probleme specifice sunt discutate în urmăritorul de erori Roundup găzduit la bugs.python.org . Dezvoltarea a avut loc inițial pe un depozit de coduri sursă auto-găzduit care rulează Mercurial , până când Python s-a mutat în GitHub în ianuarie 2017.

Lansările publice ale lui CPython vin în trei tipuri, diferențiate prin care parte a numărului de versiune este incrementată:

  • Versiuni incompatibile cu versiunile anterioare, unde codul se așteaptă să se rupă și trebuie să fie portat manual . Prima parte a numărului versiunii este incrementată. Aceste versiuni au loc rar - versiunea 3.0 a fost lansată la 8 ani după 2.0.
  • Lansări majore sau „caracteristice”, au avut loc la fiecare 18 luni, dar odată cu adoptarea unei cadențe de lansare anuale începând cu Python 3.9, se așteaptă să se întâmple o dată pe an. Acestea sunt în mare parte compatibile, dar introduc noi caracteristici. A doua parte a numărului de versiune este incrementată. Fiecare versiune majoră este acceptată de remedieri de erori timp de câțiva ani după lansare.
  • Versiunile de remediere a erorilor, care nu introduc funcții noi, apar aproximativ la fiecare 3 luni și sunt realizate atunci când un număr suficient de erori au fost remediate în amonte de la ultima versiune. Vulnerabilitățile de securitate sunt, de asemenea, corecte în aceste versiuni. A treia și ultima parte a numărului de versiune este incrementată.

Mulți candidați alfa, beta și lansare sunt, de asemenea, lansați ca previzualizări și pentru testare înainte de lansările finale. Deși există un program dur pentru fiecare lansare, acestea sunt adesea întârziate dacă codul nu este gata. Echipa de dezvoltare a Python monitorizează starea codului prin rularea suitei mari de testare în timpul dezvoltării.

Conferința academică majoră despre Python este PyCon . Există, de asemenea, programe speciale de mentorat Python, cum ar fi Pyladies .

Python 3.10 este depreciat wstr(pentru a fi eliminat în Python 3.12; adică extensiile Python trebuie modificate până atunci) și intenționează, de asemenea, să adauge potrivirea modelelor în limbă.

Generatoare de documentație API

Instrumentele care pot genera documentație pentru API-ul Python includ pydoc (disponibil ca parte a bibliotecii standard), Sphinx , Pdoc și furculițele sale, Doxygen și Graphviz , printre altele.

Denumire

Numele lui Python este derivat din grupul de comedie britanic Monty Python, de care creatorul Python, Guido van Rossum, sa bucurat în timp ce dezvolta limba. Referințele Monty Python apar frecvent în codul și cultura Python; de exemplu, variabilele metasintactice utilizate adesea în literatura Python sunt spam și ouă în loc de foo și bara tradiționale . Documentația oficială Python conține, de asemenea, diverse referințe la rutinele Monty Python.

Prefixul Py- este folosit pentru a arăta că ceva este legat de Python. Exemple de utilizare a acestui prefix în numele aplicațiilor sau bibliotecilor Python includ Pygame , o legare a SDL la Python (utilizată în mod obișnuit pentru a crea jocuri); PyQt și PyGTK , care leagă Qt și GTK de Python; și PyPy , o implementare Python scrisă inițial în Python.

Popularitate

Din 2003, Python s-a clasat în mod constant în primele zece limbaje de programare cele mai populare din TIOBE Programming Community Index , unde, din octombrie 2021, este cel mai popular limbaj (înaintea Java și C). A fost selectat Limbajul de programare al anului (pentru „cea mai mare creștere a ratingurilor dintr-un an”) în 2007, 2010, 2018 și 2020 (singura limbă care a făcut acest lucru de patru ori).

Un studiu empiric a constatat că limbajele de scriptare, cum ar fi Python, sunt mai productive decât limbajele convenționale, cum ar fi C și Java, pentru problemele de programare care implică manipularea șirurilor și căutarea într-un dicționar și a stabilit că consumul de memorie a fost adesea „mai bun decât Java și nu mult mai rău decât C sau C ++ ".

Organizațiile mari care utilizează Python includ Wikipedia , Google , Yahoo! , CERN , NASA , Facebook , Amazon , Instagram , Spotify și câteva entități mai mici precum ILM și ITA . Site-ul de rețea de știri sociale Reddit a fost scris în cea mai mare parte în Python.

Utilizări

Python Powered

Python poate servi ca limbaj de script pentru aplicații web , de exemplu, prin mod_wsgi pentru serverul web Apache . Cu Web Server Gateway Interface , un API standard a evoluat pentru a facilita aceste aplicații. Cadrele web precum Django , Pylons , Pyramid , TurboGears , web2py , Tornado , Flask , Bottle și Zope sprijină dezvoltatorii în proiectarea și întreținerea aplicațiilor complexe. Pyjs și IronPython pot fi utilizate pentru a dezvolta partea client a aplicațiilor bazate pe Ajax. SQLAlchemy poate fi utilizat ca mapator de date într-o bază de date relațională. Twisted este un cadru pentru programarea comunicațiilor între computere și este utilizat (de exemplu) de Dropbox .

Bibliotecile precum NumPy , SciPy și Matplotlib permit utilizarea eficientă a Python în calculul științific, cu biblioteci specializate precum Biopython și Astropy care oferă funcționalități specifice domeniului. SageMath este un sistem de algebră computerizată cu o interfață notebook programabilă în Python: biblioteca sa acoperă multe aspecte ale matematicii , inclusiv algebră , combinatorică , matematică numerică , teoria numerelor și calcul . OpenCV are legături Python cu un set bogat de caracteristici pentru viziunea computerizată și procesarea imaginilor .

Python este utilizat în mod obișnuit în proiecte de inteligență artificială și proiecte de învățare automată cu ajutorul bibliotecilor precum TensorFlow , Keras , Pytorch și Scikit-learn . Ca limbaj de scriptare cu arhitectură modulară , sintaxă simplă și instrumente bogate de procesare a textului, Python este adesea folosit pentru procesarea limbajului natural .

Python a fost încorporat cu succes în multe produse software ca limbaj de scriptare, inclusiv în software-ul metodelor cu elemente finite precum Abaqus , modelatorul parametric 3D precum FreeCAD , pachete de animație 3D precum 3ds Max , Blender , Cinema 4D , Lightwave , Houdini , Maya , modo , MotionBuilder , Softimage , compozitorul de efecte vizuale Nuke , programe de imagistică 2D precum GIMP , Inkscape , Scribus și Paint Shop Pro și programe de notație muzicală precum scriitor și capella . GNU Debugger folosește Python ca o imprimantă frumoasă pentru a arăta structuri complexe, cum ar fi containerele C ++. Esri promovează Python ca fiind cea mai bună alegere pentru scrierea de scripturi în ArcGIS . De asemenea, a fost utilizat în mai multe jocuri video și a fost adoptat ca primul dintre cele trei limbaje de programare disponibile în Google App Engine , celelalte două fiind Java și Go .

Multe sisteme de operare includ Python ca componentă standard. Se livrează cu cele mai multe distribuții Linux , AmigaOS 4 (folosind Python 2.7), FreeBSD (ca pachet), NetBSD , OpenBSD (ca pachet) și macOS și poate fi utilizat din linia de comandă (terminal). Multe distribuții Linux folosesc programe de instalare scrise în Python: Ubuntu folosește programul de instalare Ubiquity , în timp ce Red Hat Linux și Fedora folosesc programul de instalare Anaconda . Gentoo Linux folosește Python în sistemul său de gestionare a pachetelor , Portage .

Python este utilizat pe scară largă în industria securității informațiilor , inclusiv în dezvoltarea exploatării.

Majoritatea software-ului Sugar pentru One Laptop per Child XO, dezvoltat acum la Sugar Labs , este scris în Python. Proiectul Raspberry Pi pentru computer cu o singură placă a adoptat Python ca principalul limbaj de programare pentru utilizator.

LibreOffice include Python și intenționează să înlocuiască Java cu Python. Furnizorul său de scripturi Python este o caracteristică de bază de la versiunea 4.0 din 7 februarie 2013.

Limbi influențate de Python

Designul și filozofia lui Python au influențat multe alte limbaje de programare:

  • Boo folosește indentare, o sintaxă similară și un model de obiect similar.
  • Cobra folosește indentare și o sintaxă similară, iar documentul său de mulțumiri listează Python în primul rând printre limbile care l-au influențat.
  • CoffeeScript , un limbaj de programare care se compilează încrucișat în JavaScript, are o sintaxă inspirată de Python.
  • ECMAScript / JavaScript au împrumutat iteratoare și generatoare de la Python.
  • GDScript , un limbaj de scriptare foarte asemănător cu Python, încorporat în motorul de joc Godot .
  • Go este conceput pentru „viteza de lucru într-un limbaj dinamic precum Python” și are aceeași sintaxă pentru felierea matricelor.
  • Groovy a fost motivat de dorința de a aduce filosofia Python în Java .
  • Julia a fost concepută pentru a fi „la fel de utilizabilă pentru programarea generală ca Python”.
  • Nim folosește indentare și o sintaxă similară.
  • Creatorul lui Ruby , Yukihiro Matsumoto , a spus: "Am vrut un limbaj de scriptare mai puternic decât Perl și mai orientat obiect decât Python. De aceea am decis să-mi proiectez propriul meu limbaj."
  • Swift , un limbaj de programare dezvoltat de Apple, are o sintaxă inspirată de Python.

Practicile de dezvoltare ale Python au fost, de asemenea, imitate de alte limbi. De exemplu, practica necesității unui document care să descrie rațiunea și problemele legate de o schimbare a limbii (în Python, un PEP) este de asemenea utilizată în Tcl , Erlang și Swift.

Vezi si

Referințe

Surse

Lecturi suplimentare

linkuri externe