Python és unllenguatge de programació d'alt nivell i propòsit general molt utilitzat.[1][2][3] Va ser creat perGuido van Rossum l'any1991. La seva filosofia de disseny cerca llegibilitat en el codi i la seva sintaxi permet alsprogramadors expressarconceptes en menys línies de codi del que seria possible en llenguatges comC.[4][5] També proveeix estructures per permetre programes més entenedors tant a petita com a gran escala.[6]
Com altres llenguatges de programació dinàmics, Python es fa servir sovint com unllenguatge script, però també en una àmplia gamma de contextos no-script. Amb eines desenvolupades per tercers comPy2exe,cx Freeze oPyinstaller,[8] el codi Python pot ser reduït a programes executables independents. Existeixen intèrprets de Python per moltssistemes operatius diferents.
CPython, laimplementació de referència de Python, ésprogramari lliure i de codi obert i té un model de desenvolupament basat en lacomunitat, de la mateixa manera que la major part de les altres implementacions. És controlat per l'organització sense ànim de lucre «Python Software Foundation», creada el 6 març 2001.[9] La missió de lafundació és fomentar el desenvolupament de lacomunitat Python.[10] És responsable de diversos processos dins de la comunitat, com el desenvolupament de Python, l'administració dels drets intel·lectuals i d'obtenir fons.
Python fou creat a la darreria dels anys 80[11] perGuido van Rossum al Centrum Wiskunde & Informatica (CWI) alsPaïsos Baixos, com a successor del llenguatgeABC (que alhora havia estat inspirat enSETL),[12] capaç de gestionar excepcions i interconnectar amb elsistema operatiuAmoeba.[13] La implementació va començar el desembre de l'any1989.[14] Van Rossum va ser el principal responsable i promotor del projecte. Aquestllenguatge va ser creat amb la intenció que fos fàcil d'utilitzar i d'aprendre sense comprometre rendiment i velocitat d'execució, però elmaquinari disponible als anys 80 del segle xx en va limitar l'ús, i el projecte no va tenir el succés que se n'esperava.
El1991, Van Rossum va publicar el codi de la versió 0.9.0 aalt.sources. En aquesta etapa del desenvolupament ja hi havia classes ambherència,control d'excepcions, funcions i els tipus modulars tals comstr,list idict, entre d'altres. A més a més, en aquest llançament inicial apareixia un sistema de mòduls adoptats de Modula-3. Van Rossum descriu el mòdul com «una de les unitats més grosses de la programació de Python».[11] El model d'excepcions de Python s'assembla al de Modula-3, amb l'addició d'una clàusulaelse.[13] L'any1994 es va formar comp.lang.python, alfòrum de discussió de Python, marcant unafita en el creixement del grup d'usuaris d'aquest llenguatge.
Python va tenir la versió 1.0 l'any 1994. Una característica d'aquest llançament van ser les eines de laprogramació funcional:lambda,reduce,filter imap. Van Rossum va explicar que 12 anys abans Python ja havia adquirit aquestes funcions, cortesia d'un hacker informàtic,Amrit Prem, deLisp que les trobava a faltar al llenguatge i les havia posat a disposició.[15] No es fa cap menció específica de capherència de Lisp a les notes del llançament.
L'última versió alliberada provinent de CWI va ser Python 1.2. L'any 1995, Van Rossum va continuar el seu treball amb Python en la Corporation for National Research Initiatives (CNRI) aReston, a l'estat nord-americà deVirginia, on va llançar diverses versions del programari.
Durant la seva estada alCorporation for National Research Initiatives (CNRI), Van Rossum va proposar la iniciativaComputer Programming for Everybody (CP4E), per a fer laprogramació més accessible per a més gent, amb un ‘nivell d'alfabetització’ bàsic en llenguatges de programació, similar a l'alfabetització bàsica en anglès i les habilitatsmatemàtiques necessàries per a moltstreballadors. Python va tenir un paper crucial en aquest procés a causa de la seva orientació cap a unasintaxi neta i les metes de CP4E, que presentaven similituds amb el seu predecessor ABC. El projecte fou patrocinat perDARPA.[16]
L'any2000, l'equip principal de desenvolupadors de Python es va canviar aBeOpen.com per a formar l'equip BeOpenPythonLabs. El CNRI va demanar que la versió 1.6 fos pública, i en va continuar el desenvolupament fins que l'equip que hi era dedicat va abandonar el CNRI. El programa de llançament i el de la versió 2.0 tenien una quantitat significativa de codi superposat.[17] Python 2.0 va ser el primer i únic llançament de BeOpen.com. Després que Python 2.0 fos publicat per BeOpen.com,Guido van Rossum i els altres desenvolupadors de PythonLabs es van unir en Digital Creations.
Aquesta versió del llenguatge va prendre una característica major del llenguatge de programació funcional deHaskell:list comprehensions. La sintaxi de Python per a aquesta construcció és molt similar a la de Haskell, tret per la preferència dels caràcters de puntuació en Haskell, i la preferència de Python perparaules claus alfabètiques. Python 2.0 va introduir, a més, un sistema de recol·lecció de brossa (garbage collector) capaç de recol·lectar diferències cícliques.[17]
Posteriorment a aquest doble llançament, i després que Van Rossum abandonés el CNRI per treballar amb desenvolupadors deprogramari comercial, va quedar clar que l'opció d'utilitzar Python amb software disponible sotaGNU GPL era molt desitjable. La llicència usada fins aquell moment, la Python License, incloïa una clàusula estipulant que lallicència estava governada per l'estat deVirgínia, pel que, sota l'òptica delsadvocats deFree Software Foundation (FSF), es feia incompatible amb GPL. CNRI i FSF es van relacionar per canviar la llicència de software lliure de Python per fer-la compatible amb GPL. L'any2001, Van Rossum fou premiat amb el FSF Award for the Advancement of Free Software. A partir d'aquest any, tot elcodi,documentació i especificacions afegides des de la data de llançament de la versióalfa de Python 2.1, és propietat de la Python Software Foundation (PSF), unaorganització sense ànim de lucre fundada el 2001, prenent com a model l'Apache Software Foundation.[18] Inclòs en aquest llançament va venir una implementació delscoping més semblant a les regles destatic scoping (del qualScheme és l'originador).[19]
Unainnovació major en Python 2.2 fou la unificació dels tipus de Python (tipus escrits enC), iclasses (tipus escrits en Python) dins d'unajerarquia. Aquesta unificació va a conseguir un model d'objectes de Python pur i consistent.[20] També van ser agregats elsgeneradors que van ser inspirats pel llenguatge Icon.[20] Les addicions a la biblioteca estàndard de Python i les decisions sintàctiques van ser influenciades fortament perJava en alguns casos: elpackage logging,[21] introduït en la versió 2.3, està basat enlog4j; el parserSAX, introduït en 2.0; elpackage threading,[22] on la seva classeThread exposa unsubconjunt de lainterfície de la classehomònima a Java.
L'any2007, el projecte CP4E va romandre inactiu, i mentre que Python intenta ser fàcil d'aprendre i no gaire antiquat en la sevasintaxi isemàntica, que el fa accessible als noprogramadors, no va implícar una preocupació activa.[23]
El 2018, Van Rossum comparteix la direcció, com a membre d'un consell directiu de cinc persones.[24][25] El gener de 2019 els desenvolupadors actius delnucli de Python van escollir Brett Cannon, Nick Coghlan, Barry Warsaw, Carol Willing i Van Rossum com un “Consell Directiu” decinc membres per a continuar la direcció del projecte. Van Rossum és, doncs, l'autor principal de Python i des del 2019 continua decidint el rumb del llenguatge.[25]
La missió de la fundació és fomentar el desenvolupament de la comunitat de Python.[26] Aquest organisme és responsable de diversos processos dins de la comunitat, com el desenvolupament de Python, l'administració delsdrets intel·lectuals i l'obtenció de fons. Python compta una llicència de codi obert, denominadaPython Software Foundation License,[18] la qual és compatible amb la llicència pública general de GNU a partir de la versió 2.1.1, i incompatible amb versions anteriors.
Sobre l'origen de Python, el mateix Van Rossum va escriure l'any 1996:[27]
«
Fa uns sis anys, pels volts del desembre de 1989, cercava un projecte de programació com a "hobby" que em tingués ocupat durant les setmanes de Nadal. La meva oficina… estaria tancada, però tenia una ordinador personal, i poca cosa més a les mans. Vaig decidir de escriure un intèrpret pel nou llenguatge script al qual havia pensant darrerament: un descendent d'ABC ABC que apel·laria aUnix/Chackers. Vaig triar Python com a nom del projecte, des d'un estat d'ànim lleugerament irreverent (i un gran fan deMonty Python's Flying Circus)
Python 2.0 va ser llançat el 16 d'octubre del 2000 amb moltes novetats importants, incloent ungarbage collector detector de cicles i suport per aUnicode,[28] així com un canvi en el nom de la llicència aPython Software Foundation License.
Python 3.0 va ser llançat el 3 de desembre de2008. Va ser una important revisió del llenguatge, la qual no és totalment retrocompatible.[29] Moltes de les seves característiques importants van ser portades a les versions de Python 2.6.x[30] i 2.7.x. Els llançaments de Python 3 inclouen la utilitat2to3, queautomatitza (com a mínim parcialment) la traducció del codi de Python 2 a Python 3.[31]
Informació sobre versions recents:
Python 3.6 va portar novetats relacionades amb la implementació deCPython, tals com la reestructuració dels elements de tipusdict i que la variable d'entornpythonmalloc es pogués utilitzar per fer depuració de la memòria de l'intèrpret.[32] També va aportar novetats quant a la biblioteca estàndard, millores enseguretat, millores per a entorns de programació ensistema operatiuWindows. Alguns d'aquests canvis importants van ser la declaració de tipus de variables sense necessitat de donar-les valors inicials, millores en la velocitat d'execució de generadors, canvi en la codificació delsistema de fitxers i la consola de Windows aUTF-8 i nous protocols per als camins de fitxers del sistema.[33]
Python 3.7 va portar novetats en eldepurador tals com la incorporació de la funció internabreakpoint, el nou mòdul dedataclasses, noves APIs per a memòria local delsthreads d'execució, noves funcions per al mòdultime i diccionaris ordenats per definició.[34]
La versió 3.8 del llenguatge va suposar una breu actualització i va aportar novetats, sobretot quant a expressions d'assignació i nous protocols de crida per aCPython. Aquesta versió va ser la primera en no ser dirigida exclusivament perGuido van Rossum, sinó pel mencionat consell directiu dels cinc principals desenvolupadors.[25][35]
Python 3.9 és la següent versió del llenguatge, i algunes novetats que ja incorpora de manera estable en la seva versióalfa són relacionades amb operadors de diccionaris, millora de mòduls, optimitzacions per a list comprehensions i canvis en la construcció interna i l'API de C.[36]
Python 3.10 és la versió més recent del llenguatge, les novetats més destacades d'aquesta versió és la millora en el seguiment d'errors, la codificació automàtica de text i la iteració asíncrona.
La data de final d'ús per a Python 2.7 va ser inicialment establerta al 2015, però va ser posposada a2020, tot i sabent que una gran part del codi existent en aquesta versió delllenguatge no serà fàcilment portada a Python 3. El 2019, una versió preliminar de Python 4.0 es desenvolupa, i Van Rossum adverteix que no serà tan compatible amb Python 3.0 com aquesta versió ho va ser per a 2.0.[37][Cal actualitzar]
Python utilitzamecanografia dinàmica, una combinació de recompte de referència i un recol·lector de brossa detector de cicles per al tractament de lamemòria. També compta amb resolució dinàmica de noms, que lliga els noms del mètode i lavariable durant l'execució delprograma (també anomenat enllaç dinàmic de mètodes).
Eldisseny de Python ofereix suport per a la Programació funcional en la tradicióLisp. Les funcionsfilter,map, ireduce estan integrades en el llenguatge, així com leslist comprehensions, els diccionaris iconjunts i les expressions generadores. La biblioteca estàndard té dos mòduls (itertools i functools) que implementen eines funcionals que venen manllevades dels llenguatges de programacióHaskell iStandard ML.[16]
Python fou dissenyat per ser altament extensible, més que no pas tenir totes les seves funcionalitats construïdes en el nucli. Aquesta modularitat compacta ha fet que sigui particularment popular com un mitjà d'addició d'interfícies programables a aplicacions existents. Un dels objectius del disseny delllenguatge és la facilitat de l'extensió, de manera que es poden escriure nous mòduls fàcilment en altres llenguatges com araC oC++. La visió deVan Rossum d'un llenguatge amb petit nucli amb una biblioteca estàndard gran i unintèrpret fàcilment extensible, van mantenir el projecte allunyat d'una de les seves frustracions ambABC, que se centra precisament en elparadigma oposat.[11]
De la mateixa manera, Python aposta per unasintaxi igramàtica més simples i amb menys dificultats, donant així alsdesenvolupadors una oportunitat per dur a terme la seva metodologia de programació. A diferència dellema dePerl “hi ha més d'una manera de fer-ho”, Python recolza aquella filosofia de disseny que diu “hi hauria d'haver una manera òbvia —i preferiblement només una— de fer-ho”. Alex Martelli, membre de la Python Software Foundation iautor delllibre Python, escriu que “descriure quelcom com intel·ligent no es considera un compliment en lacultura de Python”.[43]
Els desenvolupadors de Python aposten per evitar l'optimització prematura, i rebutgen les modificacions en el llenguatge de parts no crítiques de la implementació de referènciaCPython, ja que oferirien increments marginals en velocitat amb el cost de la claredat delcodi.[44] Quan la velocitat és important, el programador de Python pot mourefuncions de temps crític a aquests mencionats mòduls d'extensió escrits en altres llenguatges, o bé utilitzarPyPy, que és uncompilador sobre la marxa o just-in-time compiler.Cython també és una opció, atès que tradueix el programa directament de Python aC i fa crides directes a l'API de C al seu intèrpret de Python. Aquesta última opció transforma el codi Python al el llenguatge C, proporcionant no només més velocitat d'execució sinó també la possibilitat d'utilitzar característiques pròpies de C, com ara tipar les variables, usar memoryviews, ús de decoradors etc.
Un objectiu important delsdesenvolupadors de Python és mantenir el llenguatge viu i en funcionament, a través de fer-lo agradable per alsprogramadors. Queda reflectit al nom del llenguatge —que és un tribut a la comèdiabritànicaMonty Python—[45] i en enfocaments lúdics detutorials i materials de referència, com per exemple fa referència aspam and eggs (d'un fragment famós de Monty Python) en comptes delsfoo i bar que trobem estàndards en altres llenguatges.[46][47]
La filosofia del nucli del llenguatge queda resumida en el documentThe Zen of Python (PEP 20), on s'inclouen aforismes com els següents:[48]
Bonic és millor que lleig
Explícit és millor que implícit
Simple és millor que complex
Complex és millor que complicat
Pla és millor que anidat
Dispers és millor que dens
La llegibilitat compta
Els casos especials no són tan importants com per trencar les regles
La practicitat guanya la puresa
Els errors mai haurien de deixar-se passar silenciosament
Tret que hagin estat silenciats explícitament
Davant de l'ambigüitat, rebutja la temptació d'endevinar
Hi hauria d'haver una manera òbvia —i preferiblement només una— de fer-ho
Tot i que aquella manera pot no ser òbvia al principi, tret que vostè siguineerlandès
Ara es millor que mai
Tot i que mai sovint és millor que ara mateix
Si la implementació és difícil d'explicar, és una mala idea
Si la implementació és fàcil d'explicar, pot ser que sigui una bona idea
Els espais de noms (namespaces) són una gran idea, fem més coses d'aquest estil!
Un neologisme comú a lacomunitat de Python éspythonià opythonic, que pot tenir una gran varietat de significats relacionats amb l'estil de programació. Diem que el codi éspythonià quan en ell s'utilitzen bé elsidiomes de Python, com ara la naturalesa delcodi o la mostra de fluïdesa en el llenguatge, que van en concordància amb lafilosofia minimalista i l'èmfasi en la llegibilitat de Python. Per altra banda, el codi que és difícil d'entendre o es llegeix com una vaga transcripció d'un altre llenguatge de programació, rep el nom deno pythonià ounpythonic. Seguint aquesta dinàmica, elsusuaris i admiradors de Python, especialment aquells que destaquen per tenir coneixements o experiència en elllenguatge, acostumen a ser anomenatspythonistes.[49][50]
El Python està dissenyat per ser un llenguatge molt visual, i, com a característica principal i distintiva, utilitzasagnat. Això és poc comú enllenguatges de programació, ja que molts (com elC oJava) utilitzen delimitadors com poden ser{ i}. Això el fa més llegible.
El sagnat és la característica més visible del Python. Al contrari que en altres llenguatges, és obligatori i s'utilitza per delimitar blocs. Un augment en el sagnat, si va precedit per una declaració correcta, significa l'inici d'un nou bloc; la disminució significa el final del bloc actual.[51] S'inclou una comparació amb el Java per exemplificar-ho.
Lainstruccióif, que executa un bloc de codi si es compleix una condició. Relacionat amb l'if existeix l'else, que executa un bloc de codi si no es compleix una condició i l'elif (contracció d'else-if enanglès:si no-si en català), que executa un bloc de codi si no es compleix una condició però si una altra.
# Comparativa entre if, elif i else:x=3ifx==0:# Si x és 0print('x és 0')elifx==2:# Si x és 2print('x és 2')else:# Si x no és 0 ni 2print('x és un altre número')
La instrucciófor, que itera sobre un objecte iterable, com per exemple una llista. Per cada iteració, executa un bloc de codi.
Lainstrucciówhile, que executa un bloc de codi sempre que es compleixi una condició.
La instrucciótry, que permet el maneig d'excepcions ocorregudes dins d'un bloc de codi. Requereix la instruccióexcept, que especifica quines excepcions s'han de tractar. També existeix la instrucciófinally, que s'executa sempre acabi al final.
Algunes de les expressions de Python són similars a altres llenguatges com Java i C, mentre que d'altres no ho són:
Suma, resta i multiplicació són el mateix, però ladivisió no. Hi ha dos tipus de divisions en Python. Divisió sencera// i divisió de punt flotant/.[52] A més a més, Python va afegir** com a operador per exponenciació. Per trobar l'mòdul d'una divisió, és a dir, el residu existeix l'operador%.
Des de Python 3.5,@es va introduir aquest nou operador, destinat a ser utilitzat per biblioteques comNumPy per a lamultiplicació de matrius.[53][54]
En el llenguatge Python,== es compara per valor, mentre que Java compara números per valor[55] i els objectes per referència.[56] L' operadoris de Python es pot utilitzar per comparar identitats d'objectes. En Python les comparacions es poden fer encadenades, per exemplea <= b <= c. Un altre operador és!= que significadiferent, és a dir,a != b significaa diferent deb.
Python utilitza les paraulesand,or,not en els operadors booleans en lloc del simbòlic&&,||,! utilitzats a Java i C.
Les expressions condicionals de Python s'escriuen comx if c else y[58] això significa que valx en cas que siguic sino valy y [77].
Python fa una distinció entrellistes ituples. Les llistes s'escriuen com[1,2,3], són mutables i no es poden utilitzar com a clau d'un diccionari, ya que les claus dels diccionaris en Python han de ser inmutables. Les tuples s'escriuen com(1,2,3), són inmutables i, per tant, si es poden utilitzar com a clau d'un diccionari de Python, només si tots els elements de la tupla són inmutables. L'operador+ permet concatenar dos tuples, però sense modificar el contingut de les tuples sino que crea una nova amb el contingut de la primera i de la segona tupla.[59]
Cadenes delimitades per cometes simples o dobles. A diferència delsshells d'Unix, els llenguatges influenciats perPerl, les cometes simples i dobles funcionen de manera idèntica.[60]
Cadenes de cometes triples, que comencen i terminen en una sèrie de tres cometes simples o dobles, permeten utilitzar varies línies per escriure.
A més de lesllistes ituples, Python conté un tipus d'estructura de dades anomenadadiccionaris, que està formada per elements amb formatclau:valor per a cada entrada del diccionari. Els diccionaris per definició són elements mutables, és a dir, pot variar el contingut d‘un valor en temps d'execució. En canvi, les claus dels diccionaris han de ser elements no mutables, el que significa que no podem utilitzar ni llistes ni diccionaris. El contingut d'un valor pot ser de qualsevol tipus de dada, fins i tot un diccionari.
En el moment d'indexar en llistes, tuples omatrius per trobar elements, Python té índex de matrius i tambéarray slicing en llistes expressats coma[index],a[inici:final] oa[inici:final:pas].[61] Els indexos negatius permeten indexar de manera inversa, és a dir, començant pel final. Els indexos positius van de0 a longitud de la llista - 1, i els indexos negatius van de -1 a -longitud de la llista. També es pot evitar escriure els indexos com per exemple si escrivima[:] retorna una copia de la llista sencera, oa[2:] retorna una copia superficial de la llista des de la posició 2 fins al final.
Els mètodes a Python són lesfuncions que es defineixen com un bloc de codi referenciat per un nom de funció, amb cosa que permetrem trucar a la funció des de fora per a la execució d'un codi intern, cada vegada que la funció sigui trucada s'executarà el codi especificat. Finalment, una vegada executat el codi es fa un return d'un o més valors. Les funcions poden rebre com a paràmetre, és a dir, dintre del parèntesi, les variables que hagin estat declarades prèviament necessàries per executar el codi especificat.[62]
L'intèrpret de Python conté una sèrie de funcions que sempre estàn disponibles perquè estàn incloses en el paquet de Python.[63]
Aquí tenim un exemple de funció que incrementa el valor de x en una unitat cada vegada que es fa la trucada a la funció.
Python és un llenguatge d'alt nivell que inclou la programació orientada a objectes. Per dur a terme aquesta part de la programació, Python conté un mecanisme de creació declasses amb el qual cada inicialització de la classe crea una instància nova de l'objecte dissenyat. Cada instància pot tenir atributs adjunts per mantenir l'estat de l'objecte. El mètode constructor__init__() permet la inicialització d'aquests atributs de l'objecte que determinen l'estat d'aquest. Aquesta inicialització pot ser pública o privada.[64] Una vegada creat aquest mètode, cada objecte té una funcionalitat diferent i per tant, amb l'objectiu que l'objecte actuiï d'una manera o d'una altra es defineixen funcions/mètodes que contenen el codi per tal que l'objecte pugui realitzar diferents operacions. Tots els mètodes han de rebre per paràmetre la paraula clauself que fa referència a l'objecte. Amb aquesta paraula, indiquem que tot es modifica sobre l'objecte creat en la instància.[65]
Amb tot això, la sintaxi per definir una clase és:
classnom_classe:def__init__(self):#Aqui posem les característiques com per exemple:self.nom='Python'#Aqui podem definir els mètodes de funcionalitat
Python utilitza laduck typing,[66] aplicant aquest concepte a objectes. Les restriccions de tipus no es verifiquen entemps compilació, sino que les operacions en un objecte poden fallar, el que significa que l'objecte donat no es de tipus adequat. Tot i que estàescrit dinàmicament, Python estàfortament escrit, per això prohibeix les operacions que no estàn ben definides (com per exemple agregar un número a una cadena).
Abans de la versió 3.0, Python tenia dos tipus de classes:d'estil antic ide nou estil.[67] La sintaxis dels dos estils era la mateixa, la diferència és que la classeobject heredava directament o indirecta. Les classes d'estil antic van ser eliminades en Python 3.0
Programa per calcular el factorial d'un nombre natural:
n=int(input('Escriu un nombre natural, llavors el seu factorial serà mostrat per pantalla: ')ifn<0:raiseValueError('Cal que sigui un nombre natural (sencer i positiu)')fact=1;i=2whilei<=n:fact*=ii+=1print(fact)
Funció recursiva que calcula la successió de fibonacci utilitzant control d'errorsassert:
n=int(input('Introdueix un nombre natural: '))asserttype(n)==intandn>=0,'Ha de ser un nombre natural'deffibonacci(n):if(n==0):n=0elif(n==1):n=1else:n=fibonacci(n-1)+fibonacci(n-2)return(n)crida_a_funcio=fibonacci(n)print('El fibonacci del nombre '+str(n)+' és: '+str(crida_a_funcio))
El Python té una biblioteca estàndard gran, que tot sovint se cita com una de les principals fortaleses del Python.[69] Aporta eines ja programades que poden fer una gran varietat de funcions. S'ha dit que el Python tépiles incloses.[70] Els mòduls de la biblioteca estàndard es poden augmentar amb mòduls propis escrits en C o bé Python. Aquest fet, de poder combinar Python i C o C++, fa que sigui unllenguatge de cola molt potent entre eines i llenguatges.
La biblioteca estàndard està particularment ben encarada per escriure aplicacions dirigides a Internet, amb una gran quantitat de formats estàndards i protocols (com per exempleMIME iHTTP). També inclou mòduls per crearinterfícies gràfiques d'usuari, connectar abases de dades relacionals o manipularexpressions regulars.[71] La biblioteca estàndard, però, no és essencial per utilitzar el Python o incrustar-lo en altres aplicacions. ElBlender 2.49, per exemple, n'omet la major part.
Tot i que la biblioteca estàndard de Python és un dels punts forts d'aquestllenguatge de programació, a causa de la quantitat d'eines que proporciona per a realitzar diferents tasques, la gran comunitat de programadors de Python ha creat amb el pas del temps biblioteques per a fer tasques específiques.
El repositori oficial de Python és el Python Package Index, abreviat com PyPI. Col·loquialment es coneix com aCheese Shop, fent referència a un sketch còmic delsMonty Python. Alberga més de 200.000 biblioteques diferents.[72] Degut a la gran varietat de biblioteques disponibles, normalment s'utilitzen gestors (package managers en anglès) per afegir aquestes biblioteques a una instal·lació de Python.
pip és el gestorde facto de Python, la majoria d'instal·lacions utilitzen com a predeterminat aquest gestor. A partir de les distribucions Python 2.7.9 i Python 3.4, pip és inclòs com a gestor per defecte. D'acord amb el seu creador,Ian Bicking, és un acrònim de Pip Installs Packages. Per instal·lar una biblioteca s'haurà d'introduir la següent comanda per terminal (linux):
pipinstall<package>
Una de les característiques principals d'aquest gestor és la possibilitat de crearentorns virtuals amb versions específiques d'algunes biblioteques. Això permet crear còpies idèntiques de grups sencers de paquets en altres ordinadors de manera senzilla i eficient. PyPI instal·la les biblioteques com a fitxers comprimitswheel (.whl); aquests es poden instal·lar directament descomprimint-los a la carpeta site-packages de la instal·lació de Python, tot i que es recomana utilitzar un instal·lador especialitzat. El format del fitxer està establert per la proposta de millora de Python 427 (Python Enhancement Proposals) o PEP 427.[73]
Conda és un gestor de paquets i d'entorns multiplataforma de codi obert per a qualsevol llenguatge de programació. Va ser desenvolupat per resoldre les dificultats que afrontaven els analistes de dades i la comunitat bioinformàtica al moment d'instal·lar biblioteques. Avui dia és utilitzat principalment per gestionar biblioteques de Python i R, i està recolzada per la companyia Anaconda Inc.[74] La gran diferència respecte de pip és la gestió de conflictes entre dependències de diferents biblioteques, ajustant les versions d'aquestes per evitar errors. És el gestor predeterminat de les distribucions d'Anaconda i Miniconda.
En referència a la utilització dels paquets, l'enfocament de conda és completament diferent al de pip; a diferència d'aquest, els paquets de conda són binaris, no necessiten uncompilador per a instal·lar-los, i tampoc estan limitats a Python únicament, ja que aquest és un gestor multillenguatge que funciona amb una gran varietat de llenguatges de programació. Per instal·lar una biblioteca s'haurà d'introduir la següent comanda per terminal, un cop instal·lat el gestor:[75]
La gran majoria de les implementacions de Python (incloentCPython) inclouen un bucle llegeix-avalua-mostra (REPL, per les seves sigles enanglès), permetent-los funcionar com unintèrpret de línies de comandes per al qual l'usuari introdueix elements seqüencialment i en rep els resultats de forma immediata.
Altres interfícies, incloentIDLE,byPython iiPython, afegeixen habilitats més enllà com ara autocompletat millorat, retenció de l'estat de la sessió acoloriment del codi per tal de facilitar-ne la visualització, comprensió i llegibilitat.
A mesura que elsescriptoris estàndard integraven entorns de desenvolupament, van anar apareixent IDEs basades en entornsweb. Alguns d'ells podrien serSageMath (pensat per desenvolupar programes de Python relacionats amb laciència i lesmatemàtiques);PythonAnywhere, un entorn basat ambIDE basat en navegador;Canopy IDE, un IDE comercial de Python fent èmfasi en lesciències de la computació;[76]Jupyter Notebook, amb unainterfície basada ennavegador web i un entorn basat en cel·les de codi, semblant a SageMath;Google Collab, amb un entorn semblant a Jupyter Notebook però amb possibilitat d'execució remota enservidors d'aquesta companyia.
La implementació principal del Python, coneguda com aCPython, està escrita enC, satisfent l'estàndard C89.[77] El CPython compila els programes Python en unbytecode intermedi,[78] que posteriorment s'executa per la màquina virtual.[79] Es distribueix amb una biblioteca estàndard força gran escrita en una barreja de C i Python. Té versions per moltes plataformes, incloentMicrosoft Windows i la major part dels sistemesUnix-like moderns. Des de la seva concepció va ésser dissenyat per ser multiplataforma; el seu ús i desenvolupament en plataformes esotèriques com Aomeba, juntament amb altres més convencionals comUnix iMac OS, ha ajudat en aquest aspecte.[80] El2009 Google va començar un projecte anomenatUnladen Swallow amb l'objectiu d'incrementar la velocitat de l'interpretador Python unes cinc vegades.[81]
El desenvolupament de Python es desenvolupa en gran manera a través del procés de Proposta de millora de Python (PEP, "Python Enhancement Proposal" en anglés), el mecanisme principal per proposar novetats importants, recopilar aportacions de la comunitat sobre problemes i documentar decisions sobre disseny de Python.[82] L'estil de codificació de Python es troba recollit a PEP 8.[83] Els PEP excepcionals són revisats i comentats per la comunitat Python i el consell directiu.[82]
La millora del llenguatge es correspon amb el desenvolupament de la implementació de referència CPython. La llista de correu python-dev és el fòrum principal per al desenvolupament de l'idioma. Els problemes específics es discuteixen alsistema de seguiment d'errorsRoundup allotjat abugs.python.org.[84] El desenvolupament va tenir lloc inicialment en un repositori de codi font que s'allotjava aMercurial fins que Python es va traslladar aGitHub el gener de 2017.[85]
Les versions públiques de CPython es divideixen en tres tipus, que es distingeixen per quina part del número de versió s'incrementa:
Versions incompatibles amb versions anteriors, on s'espera que el codi es trenqui i que es porti manualment. La primera part del número de versió s'incrementa. Aquestes versions es produeixen poc sovint, per exemple, la versió 3.0 es va publicar 8 anys després de la 2.0.
Les versions principals, aproximadament cada 18 mesos, són en gran manera compatibles, però introdueixen noves funcions. La segona part del número de versió s'incrementa. Cada versió principal compta amb el suport de correccions durant diversos anys després del seu llançament.[86]
Les solucions d'Errors de programari, que no introdueixen cap novetat, es produeixen aproximadament cada 3 mesos, quan s'ha solucionat un nombre suficient d'errors des de l'últim llançament. Les vulnerabilitats de seguretat també es troben incloses en aquestes versions. La tercera i última part del número de versió s'incrementa.[87]
Python 3.9 alpha1 es va anunciar al novembre de 2019[36] i amb l'adopció d'una nova cadència de llançament anual,[88][89] el primer llançament de 3.9 està previst per a novembre de 2020.[90]
Molts candidatsalfa, beta i estables també es publiquen com a previsualitzacions i per provar-los abans dels llançaments finals. Tot i que hi ha un calendari aproximat per a cada llançament, sovint es retarden si el codi no està llest. L'equip de desenvolupament de Python supervisa l'estat del codi executant variesproves unitàries durant el desenvolupament i utilitzant el sistema d'integració contínuaBuildBot.[91]
La comunitat de desenvolupadors de Python també ha contribuït amb més de 206.000[92] mòduls de programari (a partir del 29 de novembre de 2019)índex de paquets de Python (PyPI), el dipòsit oficial de biblioteques de tercers Python.
La conferència acadèmica principal de Python ésPyCon. També hi ha programes especials de mentoria Python, com araPyladies.
El nom de Python deriva del grup de comèdia britànicMonty Python, que el creador de Python, Guido van Rossum, va gaudir mentre desenvolupava el llenguatge. Les referències de Monty Python apareixen sovint en el codi i cultura de Python;[93] per exemple, lesvariables metàstiques que s'utilitzen sovint en la literatura de Python sónspam ieggs en lloc delsfoobar tradicionals.[93][94] La documentació oficial de Python també conté diverses referències a les rutines de Monty Python.[95][96]
El prefix Py- s'utilitza per mostrar que alguna cosa està relacionada amb Python. Exemples de l'ús d'aquest prefix en noms d'aplicacions o biblioteques de Python inclouenPygame, una vinculació deSDL a Python (usada habitualment per crear jocs);PyQt iPyGTK, que uneixenQt iGTK a Python respectivament; iPyPy, una implementació Python escrita originalment en Python.
Des del 2003, Python s'ha classificat constantment entre els deu primers llenguatges de programació més populars de l'Índex de la comunitat de programació TIOBE on, des del febrer del 2020, és el tercer llenguatge més popular (darrere deJava iC).[97] Va ser seleccionat Llenguatge de programació de l'any el 2007, 2010 i 2018.[98]
Un estudi empíric va descobrir que els llenguatges script, com Python, són més productius que els llenguatges convencionals, com C i Java, per problemes de programació que impliquen la manipulació i la cerca de cadenes en un diccionari, i va determinar que el consum de memòria era sovint «millor que Java i no molt pitjor que C o C ++ ».[99]
Python s'utilitza àmpliament en la indústria de la seguretat de la informació, inclòs en el desenvolupament d'exploits.[124][125]
La major part del programariSugar per aUn portàtil per nen/a XO (OLPC), actualment desenvolupat aSugar Labs, està escrit a Python.[126] El projecteSBCRaspberry Pi ha adoptat Python com a principal llenguatge de programació d'usuaris.
A causa del llenguatge i de les convencions fàcils d'entendre de Python, s'utilitza habitualment com a llenguatge d'introducció en ciències de la computació amb els estudiants. Això permet als estudiants aprendre fàcilment teories i conceptes informàtics i després aplicar-los a altres llenguatges de programació.
LibreOffice inclou Python i té la intenció de substituir Java per Python. El seu proveïdor de scripts de Python és una característica bàsica[127] des de la versió 4.0 des del 7 de febrer de 2013.
↑Summerfield, Mark.Rapid GUI Programming with Python and Qt. «Python is a very expressive language, which means that we can usually write far fewer lines of Python code than would be required for an equivalent application written in, say, C++ or Java»
↑«About Python». Python Software Foundation. [Consulta: 24 abril 2012]. «Fans of Python use the phrase "batteries included" to describe the standard library, which covers everything from asynchronous processing to zip files.»