Piton | ||
Data primei versiuni | 20 februarie 1991 | |
---|---|---|
Paradigme | Scop , imperativ și funcțional | |
Autor | Guido van Rossum | |
Dezvoltatori | Fundația Python Software | |
Ultima versiune | 3.9.6 (28 iunie 2021) | |
Versiune în curs de dezvoltare | 3.10.0b4 (10 iulie 2021) | |
Tastare | Tastare puternică , dinamică , de rață | |
Influențată de | ABC , C , Eiffel , ICON , Modula-3 , Java , Perl , Smalltalk , Tcl | |
Influențat | Ruby , Groovy , Boo , Julia | |
Implementări | CPython , Jython , IronPython , PyPy | |
Scris in | C pentru CPython, Java pentru Jython, C # pentru IronPython și în Python însuși pentru PyPy | |
Sistem de operare | Multiplatform | |
Licență |
Licență gratuită : Licență Python Software Foundation |
|
Site-ul web | www.python.org | |
Extensie de fișier | py, pyc, pyd, pyo, pyw, pyz și pyi | |
Python (pronunțat / p i . T ɔ / ) este un limbaj de programare interpretat , multi- paradigmă și multiplataformă . Promovează programarea imperativă structurată , funcțională și orientată pe obiecte . Are o tastare dinamică puternică , gestionarea automată a memoriei prin colectarea gunoiului și un sistem de gestionare a excepțiilor ; este astfel similar cu Perl , Ruby , Scheme , Smalltalk și Tcl .
Limbajul Python este plasat sub o licență gratuită aproape de licența BSD și funcționează pe majoritatea platformelor computerizate , de la smartphone-uri la computere mainframe , de la Windows la Unix, în special cu GNU / Linux prin macOS sau chiar Android , iOS și poate fi, de asemenea, tradus în Java sau .NET . Este conceput pentru a optimiza productivitatea programatorilor, oferind instrumente de nivel înalt și o sintaxă ușor de utilizat.
Este apreciat și de unii pedagogi care găsesc în el un limbaj în care sintaxa, clar separată de mecanismele de nivel scăzut , permite o inițiere ușoară a conceptelor de bază ale programării.
Python este un limbaj de programare care poate fi utilizat în multe contexte și se poate adapta la orice tip de utilizare datorită bibliotecilor specializate. Cu toate acestea, este folosit în special ca limbaj de scriptare pentru automatizarea sarcinilor simple, dar plictisitoare, cum ar fi un script care ar prelua vremea de pe Internet sau care s-ar integra în software-ul de proiectare asistat de computer pentru a automatiza anumite secvențe de acțiuni repetitive secțiunea Adopție ). De asemenea, este utilizat ca limbaj de dezvoltare prototip atunci când este nevoie de o aplicație funcțională înainte de a o optimiza cu un limbaj de nivel inferior. Este deosebit de răspândit în lumea științifică și are multe biblioteci optimizate pentru calcul numeric .
La sfârșitul anilor 1980 , programatorul Guido van Rossum a fost implicat în dezvoltarea limbajului de programare ABC la Centrum voor Wiskunde en Informatica (CWI) din Amsterdam , Olanda . Apoi a lucrat în echipa sistemului de operare Amoeba , ale cărei apeluri de sistem erau dificil de interfațat cu shell-ul Bourne folosit ca interfață cu utilizatorul . Apoi, el crede că un limbaj de script inspirat de ABC ar putea fi interesant ca interpret de comandă pentru Amoeba.
În 1989 , profitând de o săptămână de vacanță în vacanța de Crăciun , și-a folosit computerul personal pentru a scrie prima versiune a limbii. Fan al serialului de televiziune Monty Python's Flying Circus , el decide să boteze acest proiect Python. El a fost inspirat în principal de ABC, de exemplu pentru indentare precum sintaxa sau tipuri de nivel înalt, dar și din Modula-3 pentru tratarea excepțiilor , limbajul C și instrumentele UNIX .
În anul următor, limba a început să fie adoptată de echipa de proiect Amoeba, Guido continuând să se dezvolte în principal în timpul liber. ÎnFebruarie 1991, prima versiune publică, numerotată 0.9.0, este postată pe forumul Usenet alt.sources. Cea mai recentă versiune lansată la CWI este Python 1.2.
În 1995 , Van Rossum și-a continuat activitatea pe Python la CNRI (în) din Reston , Statele Unite , unde a lansat mai multe versiuni ale software-ului.
Din'August 1995, echipa Python lucrează la NCRI pe Graal un browser web folosind Tk . Este echivalentul Python al browserului HotJava , permițându-vă să rulați applet-uri într-un mediu sigur. Prima versiune publică, disponibilă în noiembrie, este 0,2. Conduce dezvoltarea de module pentru biblioteca standard precum rexec , htmllib sau urllib . Versiunea 0.6 va fi ultima din Graal ; este publicat înAprilie 1999.
În 1999 , proiectul Computer Programming for Everybody (CP4E) a fost lansat în comun între CNRI și DARPA . Este vorba despre utilizarea Python ca o învățătură de programare limbă . Această inițiativă va duce la crearea mediului de dezvoltare IDLE . Cu toate acestea, din cauza lipsei de finanțare a proiectului de către DARPA și a plecării multor dezvoltatori Python din NCRI (inclusiv Guido van Rossum), proiectul a dispărut în 2000. Python 1.6 a fost ultima versiune lansată la NCRI.
În 2000 , echipa de dezvoltare Python de bază s-a mutat pe BeOpen.com pentru a forma echipa BeOpen PythonLabs . Python 2.0 este singura versiune lansată pe BeOpen.com. După această lansare, Guido Van Rossum și ceilalți dezvoltatori PythonLabs s-au alăturat Digital Creations (acum cunoscut sub numele de Zope Corporation ).
Andrew M. Kuchling publică în Decembrie 1999un text numit Python Warts , care sintetizează cele mai frecvente nemulțumiri exprimate împotriva limbajului. Acest document va avea o influență clară asupra dezvoltărilor viitoare ale limbii.
Python 2.1 este o versiune derivată a Python 1.6.1 și Python 2.0. Licența sa este redenumită Licența Python Software Foundation . Orice cod , documentație și specificații adăugate de la lansarea Python 2.1 alpha este deținut de Python Software Foundation (PSF), o organizație non-profit fondată în 2001, modelată după Apache Software Foundation .
Pentru a remedia unele defecte lingvistice (de exemplu, orientate spre obiecte cu două tipuri de clase ) și pentru a curăța biblioteca standard a elementelor sale învechite și redundante, Python a ales să rupă compatibilitatea înapoi în noua versiune majoră, Python 3.0, publicată îndecembrie 2008. Această versiune este rapid urmată de o versiune 3.1 care corectează erorile timpurii ale versiunii 3.0.
Python a fost conceput pentru a fi un limbaj lizibil. Acesta își propune să fie curat vizual. De exemplu, are mai puține construcții sintactice decât multe limbaje structurate, cum ar fi C , Perl sau Pascal . Comentariile sunt indicate de caracterul încrucișat (#).
Cele Blocurile sunt identificate prin indentare în loc de acolade ca C sau C ++ ; sau begin ... endca în Pascal sau Ruby . Creșterea indentării marchează începutul unui bloc, iar reducerea indentării marchează sfârșitul blocului curent. Prin convenție (în prezent PEP8), indentarea este de obicei patru spații în Python.
Funcția factorială în C | Funcția factorială în Python |
---|---|
int factorielle(int n) { if (n < 2) { return 1; } else { return n * factorielle(n - 1); } } | def factorielle(n): if n < 2: return 1 else: return n * factorielle(n - 1) |
Notă: indentarea poate fi modificată sau eliminată în versiunea C fără a-și schimba comportamentul. La fel, funcția Python poate fi scrisă cu o expresie condițională. Cu toate acestea, indentarea corectă facilitează detectarea erorilor atunci când sunt imbricate mai multe blocuri și, prin urmare, facilitează eliminarea acestor erori. Acesta este motivul pentru care este de preferat să se indenteze programele în C. Versiunea scurtă ar fi scrisă după cum urmează:
Funcția factorială în C | Funcția factorială în Python |
---|---|
int factorielle(int n) { return n < 2 ? 1 : n * factorielle(n - 1); } | def factorielle(n): return n * factorielle(n - 1) if n > 1 else 1 |
Cuvintele cheie rezervate în limbă Python sunt furnizate în lista de keyword.kwlistmodule keyword.
Cuvintele cheie ale Python 2.7.5 sunt: and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield.
Începând cu Python 3.0 printși execnu mai sunt cuvinte cheie în limbă, ci funcții ale modulului builtins. Se adaugă la cuvinte cheie: True, False, Noneși nonlocal. Primele trei erau deja prezente în versiunile anterioare, dar nu mai sunt editabile (anterior True = 1era posibilă atribuirea ). nonlocala fost introdus de PEP 3104 și permite, într-o funcție definită în interiorul altei funcții, să modifice o variabilă cu un nivel mai mare de domeniu . Înainte de aceasta, numai variabilele locale pentru funcție și global (nivelul modulului) erau modificabile. Cu toate acestea, a fost posibil, și încă nu există cuvântul cheie nonlocal, să modificați un obiect atribuit unei variabile cu un nivel mai mare de domeniu, de exemplu o listă cu metoda append- acest lucru este evident imposibil pentru un obiect neschimbat .
Tipuri de bazăTipurile de bază din Python sunt relativ cuprinzătoare și puternice. Există, printre altele:
Obiectele iterabile sunt buclate fordupă cum urmează:
for element in objet_iterable: traiter(element)Pentru un șir de caractere, iterația continuă caracter cu caracter.
Este posibil să derivați clase din tipuri de bază pentru a vă crea propriile tipuri. De asemenea, puteți crea propriile tipuri de obiecte iterabile fără a moșteni iterabilele de bază utilizând protocolul de iterație al limbii.
Programare funcționalăPython permite programarea într-un stil funcțional . De asemenea, are înțelegeri de listă și, mai general, înțelegerile pot produce generatoare, dicționare sau seturi . De exemplu, pentru a construi lista pătratelor cu numere naturale mai mici de 10, putem folosi expresia:
liste = [x**2 for x in range(10)] # liste = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Lista chiar numere :
liste = [entier for entier in range(10) if entier % 2 == 0] # liste = [0, 2, 4, 6, 8]Un tabel de trecere de la literele alfabetului la codul lor ASCII :
{chr(n): n for n in range(65, 91)}Setul de litere dintr-un cuvânt (produce setul {'r', 'c', 'd', 'b', 'a'}):
s = "abracadabra" {c for c in s}O înțelegere poate consta din mai multe bucle și filtre și există o corespondență cu codul care efectuează același calcul folosind instrucțiuni forși if :
Intelegere | Cod echivalent |
---|---|
[ i + j if i != j else 0 for i in range(n) if i % 2 != 0 for j in range(n) if j % 3 != 0 ] | a = [] for i in range(n): if i % 2 != 0: for j in range(n): if j % 3 != 0: a.append(i + j if i != j else 0) |
Este posibilă o formă limitată de funcție anonimă :
lambda x: x + 2Funcțiile Lambda pot fi definite în linie și utilizate ca argumente în expresiile funcționale:
filter(lambda x: x < 5, une_liste)va returna o listă formată din elementele a_list mai puțin de 5. Același rezultat poate fi obținut cu
[x for x in une_liste if x < 5]Python lambdas acceptă doar expresii și nu poate fi folosit ca funcții anonime generalizate; dar în Python, toate funcțiile sunt obiecte, deci pot fi transmise ca argumente către alte funcții și apelate atunci când este necesar. Într-adevăr, o funcție definită cu def poate fi creată în interiorul altei funcții și astfel obținem o definiție a funcției într-o variabilă locală, de exemplu:
def filtre_inferieur_a_5(une_liste): def mon_filtre(x): # variable locale mon_filtre return x < 5 return filter(mon_filtre, une_liste)O funcție locală poate modifica mediul funcției care a creat-o, datorită cuvântului cheie nonlocal(consultați Închidere (IT) ):
def accum(pas): total = 0 def ajoute(n): nonlocal total total += n * pas return total return ajouteEste astfel posibil să se creeze mai mulți acumulatori, fiecare referindu-se la propriul său total. Este posibil să accesați mediul unei funcții locale folosind atributul __closure__.
Programarea obiectelorToate tipurile de bază, funcțiile, instanțele claselor (obiectele „clasice” ale limbajelor C ++ și Java ) și clasele în sine (care sunt instanțe ale meta-claselor) sunt obiecte.
O clasă este definită cu cuvântul cheie class. Cele Clasele Python susțin moștenirea multiplă ; nu există suprasolicitare statică ca în C ++ sau restricții asupra moștenirii, cum este cazul în Java (o clasă implementează mai multe interfețe și moștenește dintr-o singură clasă), dar mecanismul argumentelor opționale și după cuvinte cheie este mai general și mai flexibil . În Python, atributul unui obiect poate face referință la o instanță sau la o variabilă de clasă (cel mai adesea o metodă). Este posibil să citiți sau să modificați un atribut dinamic cu funcțiile:
Exemplu de două clase simple:
class Personne: def __init__(self, nom, prenom): self.nom = nom self.prenom = prenom def presenter(self): return self.nom + " " + self.prenom class Etudiant(Personne): def __init__(self, niveau, nom, prenom): Personne.__init__(self, nom, prenom) self.niveau = niveau def presenter(self): return self.niveau + " " + Personne.presenter(self) e = Etudiant("Licence INFO", "Dupontel", "Albert") assert e.nom == "Dupontel" Metode speciale și definirea operatorilorPython oferă un mecanism elegant, orientat obiect , pentru definirea unui set predefinit de operatori: oricărui obiect Python i se pot da așa-numitele metode speciale.
Aceste metode, începând și terminând cu două puncte de subliniere , sunt apelate atunci când se utilizează un operator pe obiect: +(metodă __add__), +=(metodă __iadd__), [](metodă __getitem__), ()(metodă __call__) etc. Metodele ca __repr__și __str__vă permit să definiți reprezentarea unui obiect în interpretorul interactiv și redarea acestuia cu funcția de imprimare .
Posibilitățile sunt numeroase și sunt descrise în documentația lingvistică.
De exemplu, putem defini adăugarea a doi vectori bidimensionali cu următoarea clasă:
class Vector2D: def __init__(self, x, y): # On utilise un tuple pour stocker les coordonnées self.coords = (x, y) def __add__(self, other): # L'instruction a+b sera résolue comme a.__add__(b) # On construit un objet Vector2D à partir des coordonnées propres à l'objet, et à l'autre opérande return Vector2D(self.coords[0]+other.coords[0], self.coords[1]+other.coords[1]) def __repr__(self): # L'affichage de l'objet dans l'interpréteur return "Vector2D(%s, %s)" %self.coords a = Vector2D(1, 2) b = Vector2D(3, 4) print(a + b) # Vector2D(4, 6) GeneratoareCuvântul cheie yieldutilizat într-o funcție face posibilă transformarea acestei funcții într-un generator. Apelarea acestei funcții returnează un obiect de tip generator , care poate fi folosit for, de exemplu, într-o buclă .
La fiecare apel, generatorul își efectuează procesarea până când întâlnește cuvântul cheie yield, returnează valoarea expresiei yieldși, la următorul apel, își reia fluxul imediat după yield. De exemplu, pentru a calcula secvența Fibonacci , putem scrie:
def gen_fibonacci(): """Générateur de la suite de Fibonacci""" a, b = 0, 1 while True: yield a # Renvoie la valeur de "a", résultat de l'itération en cours a, b = b, a + b fi = gen_fibonacci() for i in range(20): print(next(fi))Modulul itertoolsvă permite să manipulați generatoarele. De exemplu, pentru a extrage primele 10 elemente din generatorul anterior:
import itertools list(itertools.islice(gen_fibonacci(), 10)) # renvoie [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]De la Python 3.3, este posibil să se producă un generator dintr-o funcție recursivă, datorită sintaxei yield from, care a apărut în PEP 380 și care „deleagă” calculul unui sub-generator. Următorul exemplu calculează permutațiile reginelor corespunzătoare soluțiilor problemei celor opt regine extinse la o tablă de șah de dimensiunea n × n.
def queens(n): a = list(range(n)) up = [True] * (2 * n - 1) down = [True] * (2 * n - 1) def sub(i): for k in range(i, n): j = a[k] p = i + j q = i - j + n - 1 if up[p] and down[q]: if i == n - 1: yield tuple(a) else: up[p] = down[q] = False a[i], a[k] = a[k], a[i] yield from sub(i + 1) up[p] = down[q] = True a[i], a[k] = a[k], a[i] yield from sub(0) sum(1 for a in queens(8)) # Nombre de solutions, renvoie 92Un constructor ar putea arăta la fel ca o funcție care returnează o listă, dar spre deosebire de o listă care conține toate elementele sale, un constructor își calculează elementele unul câte unul .
Astfel, testul 36 in [n * n for n in range(10)]va fi efectuat pe lista calculată integral, în timp ce în 36 in (n * n for n in range(10)), care folosește un generator, calculul pătratelor se oprește imediat ce se găsește 36. Ne putem convinge de acest lucru înlocuindu-l n * ncu un apel funcțional care produce un efect de margine , de exemplu un afișaj pe ecran.
Datorită utilizării intensive a dicționarelor (container asociativ dezvoltat cu tabele hash ), Python face posibilă explorarea diferitelor obiecte ale limbajului ( introspecție ) și, în anumite cazuri, modificarea acestora ( mijlocirea ).
Tastarea nu este verificat la compilare. Python folosește tastarea rațelor : la runtime, dacă o metodă invocată asupra unui obiect are aceeași semnătură ca o metodă declarată asupra acestui obiect, atunci se execută ultima metodă. Prin urmare, invocarea unei metode care nu există pe un obiect va eșua, ceea ce înseamnă că obiectul în cauză nu este de tipul corect. În ciuda lipsei de tastare statică, Python este puternic tastat, interzicând operațiile fără sens (de exemplu, adăugând un număr la un șir) în loc să încerce în tăcere să îl convertească într-o formă semnificativă. Python oferă funcții pentru transformarea variabilelor într-un alt tip:
points = 3.2 # points est du type float print("Tu as " + points + " points !") # Génère une erreur de typage points = int(points) # points est maintenant du type int (entier), sa valeur est arrondie à l'unité inférieure (ici 3) print("Tu as " + points + " points !") # Génère une erreur de typage points = str(points) # points est maintenant du type str (chaîne de caractères) print("Tu as " + points + " points !") # Plus d'erreur de typage, affiche 'Tu as 3 points !'Python oferă, de asemenea, un mecanism static de tastare pentru atributele clasei, folosind API-ul trăsăturii sau modelul de design al decoratorilor .
AdnotăriDe la versiunea 3.0, Python oferă adnotarea variabilelor în funcții (introduse în PEP 3107). Acest lucru permite ca codul să fie mai lizibil fără a acționa ca o soluție de tastare statică, deoarece nimic nu obligă să urmeze aceste adnotări.
def hello(name: str) -> str: return "Hello {} !".format(name) hello("Alice") # Appel suggéré par les annotations hello(True) # Appel non conforme mais tout à fait fonctionnelÎn plus, începând cu versiunea 3.5, Python oferă modulul de tastare (introdus în PEP 484).
from typing import List def split_string(string: str) -> List[str]: return string.split(" ") CompilareEste posibil să efectuați o analiză statică a modulelor Python cu instrumente precum Pylint, mypy sau PyChecker. Fără a necesita execuție, aceste instrumente detectează defecte sau construcții depreciate. De exemplu, o clasă care moștenește dintr-o clasă abstractă și care nu redefinește metode abstracte sau variabile utilizate înainte de a fi declarate sau atribute de instanță declarate în afara metodei __init__.
De asemenea, este posibil să se genereze un cod intermediar Python ( bytecode ).
Instrumente precum PyInstaller sau altele mai specifice precum cx_Freeze sub Unix , Windows și macOS , py2app sub macOS și py2exe sub Windows permit „compilarea” unui program Python sub forma unui executabil care cuprinde programul și un interpret Python.
Programul nu rulează mai repede (nu este compilat ca cod de mașină), dar acest lucru simplifică foarte mult distribuția sa, în special pe mașini unde interpretul Python nu este instalat.
În Python, totul este un obiect , în sensul că o variabilă poate conține o referință la toate elementele tratate de limbaj: numere, metode, module etc. . Cu toate acestea, înainte de versiunea 2.2, clasele și instanțele de clasă erau un tip special de obiect, ceea ce însemna că era, de exemplu, imposibil să obții propria ta subclasă din obiectul listă .
MetodeModelul obiect al Python este inspirat de cel al Modulei-3. Printre aceste împrumuturi se numără obligația de a declara instanța obiectului curent, denumit în mod convențional sine , ca primul argument al metodelor, și de fiecare dată dorim să accesăm datele acestei instanțe în corpul acestei metode. Această practică nu este firească pentru programatorii care vin de exemplu de la C ++ sau Java, profuzia de sine fiind adesea criticată ca fiind o poluare vizuală care împiedică citirea codului. Dimpotrivă, promotorii sinelui explicit consideră că evită utilizarea convențiilor de denumire pentru datele membrilor și că simplifică sarcini precum apelarea unei metode superclase sau rezolvarea dezambiguizării între datele membre.
Python recunoaște trei tipuri de metode:
Limbajul are un suport foarte limitat pentru încapsulare . Nu există, ca în Java de exemplu, controlul accesibilității prin cuvinte cheie precum protectedsau private.
Filozofia lui Python este de a diferenția conceptual încapsularea de ascunderea informațiilor. Mascarea informațiilor vizează prevenirea utilizării frauduloase, este o preocupare a securității computerului . Modulul bastion al bibliotecii standard, care nu mai este menținut în cele mai recente versiuni ale limbajului, a făcut astfel posibilă controlul accesului la atributele unui obiect în cadrul unui mediu de execuție restricționat.
Incapsularea este o problemă de dezvoltare software. Sloganul dezvoltatorilor Python este că toți adulții suntem de acord aici . Ei consideră că este suficient să se indice, scriind convenții, părțile publice ale interfețelor și că revine utilizatorilor obiectelor să se conformeze acestor convenții sau să își asume responsabilitățile. Obiceiul este de a prefixa membrii privați cu o subliniere. Limbajul permite, de asemenea, utilizarea unei linii de subliniere duble pentru a evita coliziunile de nume, prin prefixarea automată a numelui datelor cu cel al clasei în care este definit.
Utilizarea funcției property()face posibilă definirea proprietăților care urmăresc să intercepteze, folosind metode, accesele la un membru de date. Acest lucru face inutilă definirea sistematică a accesorilor și ascunderea datelor așa cum este obișnuit în C ++, de exemplu.
PatrimoniuPython acceptă moștenirea multiplă . De la versiunea 2.3, folosește algoritmul C3 (en) , derivat din limbajul Dylan , pentru a rezolva ordinea de rezoluție a metodei ( MRO ). Versiunile anterioare au folosit un algoritm de traversare profundă care a cauzat probleme în cazul unei moșteniri de diamante .
Python are o bibliotecă standard mare , care oferă instrumente adecvate pentru multe sarcini diverse. Numărul de module din biblioteca standard poate fi mărit cu module specifice scrise în C sau Python.
Biblioteca standard este deosebit de bine concepută pentru scrierea aplicațiilor care utilizează Internetul, cu un număr mare de formate standard și protocoale acceptate (cum ar fi MIME și HTTP ). Sunt de asemenea furnizate module pentru crearea interfețelor grafice și manipularea expresiilor regulate . Python include, de asemenea, un cadru pentru testarea unităților ( unittestanterior PyUnit înainte de versiunea 2.1) pentru a crea suite de teste complete.
Deși fiecare programator își poate adopta propriile convenții pentru scrierea codului Python, Guido van Rossum a pus la dispoziție un ghid, denumit „PEP 8”. Publicat în 2001, este încă menținut pentru ao adapta la schimbările de limbă. Google oferă, de asemenea, un ghid.
Python are mai multe module disponibile pentru crearea de software cu o interfață grafică . Cel mai frecvent este Tkinter . Acest modul este potrivit pentru multe aplicații și poate fi considerat suficient în majoritatea cazurilor. Cu toate acestea, au fost create alte module pentru a putea conecta Python la alte biblioteci software („ set de instrumente ”), pentru mai multe funcționalități, pentru o mai bună integrare cu sistemul de operare utilizat sau pur și simplu pentru a putea folosi Python cu biblioteca sa preferată. Într-adevăr, unii programatori consideră că utilizarea Tkinter este mai dureroasă decât alte biblioteci. Aceste alte module nu fac parte din biblioteca standard și, prin urmare, trebuie obținute separat.
Principalele module care oferă acces la bibliotecile GUI sunt Tkinter și Pmw (Python megawidgets) pentru Tk , wxPython pentru wxWidgets , PyGTK pentru GTK + , PyQt și PySide pentru Qt și, în cele din urmă, FxPy pentru FOX Toolkit . Există, de asemenea, o adaptare a bibliotecii SDL : Pygame , o legare a SFML : PySFML, precum și o bibliotecă scrisă special pentru Python: Pyglet (en) .
De asemenea, este posibil să creați aplicații Silverlight în Python pe platforma IronPython .
Guido van Rossum este autorul principal al Python, iar rolul său de factor de decizie permanent permanent al Python este recunoscut cu umor prin titlul de „ Dictator binevoitor pentru viață ” ( BDFL). De candiulie 2018, Guido van Rossum s-a declarat în vacanță permanentă din rolul său de BDFL. De asemenea, și-a anulat candidatura pentru consiliul lingvistic de regie dinnoiembrie 2019.
El este asistat de o echipă de dezvoltatori de bază care au acces de scriere la depozitul CPython și coordonează pe lista de distribuție python-dev. Lucrează în principal la limbajul și biblioteca de bază. Ocazional primesc contribuții de la alți dezvoltatori Python prin intermediul platformei Roundup de gestionare a erorilor , care a înlocuit SourceForge .
Utilizatorii sau dezvoltatorii de biblioteci terțe folosesc o varietate de alte resurse. Principala mass-media generalistă din jurul Python este forumul Usenet de limbă engleză comp.lang.python.
Aluziile la Monty Python sunt destul de frecvente. Tutorialele Python folosesc adesea cuvintele spam și ouă ca variabilă de metasintaxă . Aceasta este o referire la Monty Python Spam schiță , în cazul în care doi patroni încearcă să comande o masă folosind un card care are spam marca conserve de șuncă în aproape fiecare fel de mâncare. Această schiță a fost, de asemenea, luată ca referință pentru a indica e-mailurile nesolicitate .
Mai multe companii sau organizații menționează pe site-ul lor oficial că folosesc Python:
Python este, de asemenea, limbajul de comandă pentru un număr mare de software gratuit:
Și comercial:
Python este folosit ca limbaj de programare în învățământul secundar și superior, în special în Franța. Din 2013, a fost predat acolo, în același timp cu Scilab , tuturor studenților la orele de științe pregătitoare ca parte a nucleului comun (informatică pentru toți). Anterior, învățământul informatic era limitat la o singură opțiune în MP, instruirea fiind în limbajul Caml sau Pascal . Această opțiune există încă, dar Pascal a fost abandonat din sesiunea din 2015 a competițiilor, așa că doar Caml rămâne în această predare. Primele teste de competiție pe limba Python sunt, de asemenea, cele ale sesiunii 2015.
Pe lângă versiunea de referință, numită CPython (deoarece este scrisă în limbajul C ), există și alte sisteme care implementează limbajul Python:
Aceste alte versiuni nu beneficiază neapărat de întreaga bibliotecă de funcții scrise în C pentru versiunea de referință și nici de cele mai recente evoluții lingvistice.
Sunt disponibile diferite distribuții, care uneori includ o mulțime de pachete dedicate unui anumit domeniu:
Acestea nu sunt implementări diferite ale limbajului Python: se bazează pe CPython, dar vin cu o serie de biblioteci preinstalate.
Versiune | Data de lansare | Sfârșitul sprijinului | Sosiri noi |
---|---|---|---|
1.5 (.2) | 3 ianuarie 1998 | 13 aprilie 1999 |
|
1.6 | 5 septembrie 2000 | Septembrie 2000 |
|
2.0 | 16 octombrie 2000 | 22 iunie 2001 |
|
2.1 | 15 aprilie 2001 | 9 aprilie 2002 |
|
2.2 | 21 decembrie 2001 | 30 mai 2003 |
|
2.3 | 29 iunie 2003 | 11 martie 2008 | |
2.4 | 30 noiembrie 2004 | 19 decembrie 2008 |
|
2.5 | 19 septembrie 2006 | 26 mai 2011 |
|
2.6 | 1 st Septembrie Octombrie Noiembrie 2008 de | 24 august 2010 (actualizări de securitate până la 29 octombrie 2013) |
|
2.7 | 3 iulie 2010 | 1 st luna ianuarie în anul 2020 |
|
3.0 | 3 decembrie 2008 | 13 februarie 2009 |
Consultați PEP 3100 pentru detalii |
3.1 | 27 iunie 2009 | 12 iunie 2011 (actualizări de securitate până la Iunie 2012) |
|
3.2 | 20 februarie 2011 | 13 mai 2013 (actualizări de securitate până la 20 februarie 2016) |
|
3.3 | 29 septembrie 2012 | 8 martie 2014 (actualizări de securitate până la 29 septembrie 2017) |
|
3.4 | 16 martie 2014 | 9 august 2017 (actualizări de securitate până la 18 martie 2019) |
|
3.5 | 13 septembrie 2015 | 8 august 2017 (actualizări de securitate până la 13 septembrie 2020) |
|
3.6 | 23 decembrie 2016 | 24 decembrie 2018 (actualizări de securitate până la decembrie 2021) |
|
3.7 | 31 ianuarie 2018 | 27 iunie 2020 (actualizări de securitate până la Iunie 2023) |
|
3.8 | 14 octombrie 2019 | Aprilie 2021 (actualizări de securitate până la Octombrie 2024) |
|
3.9 | 5 octombrie 2020 | Mai 2022 (actualizări de securitate până la Octombrie 2025) |
|
Propunerile de îmbunătățire Python (sau PEP: Propunerea de îmbunătățire Python ) sunt documente textuale destinate să fie calea spre îmbunătățirea Python și să preceadă toate modificările sale. Un PEP este o propunere de orientare spre dezvoltare (procesul PEP) , o propunere tehnică (Standard Track PEP) sau o recomandare simplă ( PEP informațional ). Cel mai cunoscut PEP este PEP 8 pentru ghidul său de stil de cod.
În 2009, este versiunea 3 a Python, care înlocuiește din ce în ce mai mult versiunea 2 (proiectul a fost numit inițial „Python 3000” sau „Py3K”), fără compatibilitate inversă cu seria de versiuni 2.x, pentru a elimina punctele slabe ale limba. Orientarea proiectului a fost „reducerea redundanței Python prin eliminarea metodelor învechite”. Python 3.0a1, prima versiune alfa, a fost lansată pe31 august 2007, și există un PEP care detaliază modificările planificate, precum și o pagină pentru a ghida programatorii în alegerea lor de Python 2 sau 3.
Calculatoare destinate elevilor de liceu (inclusiv Casio , NumWorks , Texas Instruments ...) și care susțin funcționarea Python în Python 3. Aceste calculatoare pot schimba programe cu calculatoare personale .
FilozofiePython 3 a fost dezvoltat cu aceeași filozofie ca și în versiunile sale anterioare, astfel încât orice referire la filosofia lui Python s-ar aplica și versiunii 3. Cu toate acestea, limbajul a ajuns să acumuleze o serie de metode redundante. În încercarea de a elimina redundanța în limbă și modulele sale, Python 3 urmează linia directoare Python „Ar trebui să existe o singură metodă care să fie optimă și naturală pentru orice”.
Python 3 rămâne un limbaj multi-paradigmă. Programatorii vor avea în continuare posibilitatea de a alege între orientarea obiectului, programarea structurată, programarea funcțională și alte paradigme; Python 3 este destinat să fie utilizat mai natural decât în versiunile 2.x, deși printnecesită utilizarea parantezelor spre deosebire de Python 2.
Planificare și compatibilitatePython 3.0a1, prima versiune alfa a Python 3.0, a fost lansată pe 31 august 2007. Versiunile 2.x și 3.x ale Python vor fi lansate în paralel pentru mai multe cicluri de dezvoltare, timp în care seria 2.x va rămâne în primul rând pentru compatibilitate, inclusiv unele caracteristici importate din Python 3.x. PEP 3000 conține mai multe informații despre procesul de lansare a unei versiuni.
La fel ca Perl 6 , Python 3.0 întrerupe compatibilitatea înapoi (compatibilitatea înapoi). Utilizarea codului scris pentru seria 2.x nu este garantată cu Python 3.0. Acesta din urmă aduce modificări fundamentale, cum ar fi trecerea completă la Unicode și din acest motiv o distincție necesară între șiruri și obiecte „octeți”. Tastarea dinamică asociată cu anumite metode pe obiecte de tip dicționar face o tranziție perfectă de la Python 2.x la Python 3.0 foarte dificilă. Un instrument numit „2to3” traduce cea mai mare parte a versiunilor 2.x în versiunile 3.x și indică zone de cod care necesită finalizare cu comentarii și avertismente speciale. În pre-lansare, 2to3 pare să reușească sincer să obțină o traducere corectă. Ca parte a unei migrări de la Python 2.x la Python 3.x, PEP 3000 recomandă păstrarea codului original ca bază pentru modificări și traducerea acestuia pentru platforma 3.x folosind 2to3.
Python 2.6 oferă un început pentru compatibilitatea cu versiunile anterioare, precum și un mod „avertisment” care ar trebui să sensibilizeze potențialele probleme de tranziție pentru trecerea la Python 3.
Există versiuni de Python potrivite pentru Android și iPhone în versiunea 2.5 sau 2.6. Disponibil în iOS Jailbreak pe iOS datorită „instrumentelor de configurare”, și pe Android datorită SL4A care oferă chiar posibilitatea de a face interfețe grafice mici datorită modulului „Android” și care permite trimiterea de SMS - uri , pornirea camerei sau pentru a vibra telefonul. Următoarele rânduri arată cum se face acest lucru:
droid = android.Android() # client lié au serveur local lancé par l'application SL4A # pour contrôler un téléphone distant à l'adresse 192.168.0.5, avec SL4A lancé sur le port 9887 # il suffit de faire : android.Android('192.168.0.5', 9887) droid.vibrate(2.5) # fait vibrer le téléphone (local ou distant) pendant 2.5 secondesUn port Python pe terminalele Blackberry a fost lansat înIunie 2012, pentru sistemul BlackBerry OS 10. O versiune mai ușoară a fost lansată înseptembrie 2012, numit „BlackBerry-Tart”, din cauza unui joc de cuvinte în limba engleză: „ o„ tartă ”este mai ușoară decât o„ plăcintă ” ”, cu referire la tradiționala „ plăcintă cu mere ”. Se bazează pe Python 3.2.2.