Python

llenguatge de programació

Python és un llenguatge de programació d'alt nivell i propòsit general molt utilitzat.[1][2][3] Va ser creat per Guido van Rossum l'any 1991. La seva filosofia de disseny busca llegibilitat en el codi i la seva sintaxi permet als programadors expressar conceptes en menys línies de codi del que seria possible en llenguatges com C.[4][5] També proveeix estructures per permetre programes més entenedors tant a petita com a gran escala.[6]

Infotaula de llenguatge de programacióPython
Python logo and wordmark.svg
Tipusllenguatge de programació orientat a objectes, llenguatge de programació dinàmic, llenguatge de programació funcional, llenguatge script, llenguatge de programació multiparadigma, llenguatge de programació imperatiu, Llenguatge interpretat, llenguatge de programació d'alt nivell, llenguatge de programació i sistema en temps d'execució Modifica el valor a Wikidata
Data de creació20 febrer 1991 Modifica el valor a Wikidata
DissenyGuido van Rossum Modifica el valor a Wikidata
DesenvolupadorPython Software Foundation i Guido van Rossum Modifica el valor a Wikidata
EpònimMonty Python Modifica el valor a Wikidata
Paradigma de programacióprogramació funcional, programació orientada a objectes, programació dinàmica, llenguatge imperatiu i multi-paradigm programming (en) Tradueix Modifica el valor a Wikidata
Darrera versió estable3.9.0 () Modifica el valor a Wikidata
Tipus de dadesForta, dinàmica
Majors implementacionsCPython, Jython, IronPython i PyPy Modifica el valor a Wikidata
DialectesStackless Python, RPython, Cython
Llenguatge de programacióPython i C Modifica el valor a Wikidata
Influenciat perALGOL 68 (en) Tradueix, ABC, Modula-3, C, C++, Perl, Java, Lisp, Haskell, APL, CLU, Dylan, Icon i ML Estàndard Modifica el valor a Wikidata
Ha influenciatRuby, Boo, Groovy
Sistema operatiumultiplataforma Modifica el valor a Wikidata
Extensió dels fitxerspy, pyc, pyd, pyo, pyw i pyz Modifica el valor a Wikidata
Codi fontCodi font Modifica el valor a Wikidata
LlicènciaPython Software Foundation License Modifica el valor a Wikidata
Etiqueta d'Stack ExchangeEtiqueta, Etiqueta i Etiqueta Modifica el valor a Wikidata
Pàgina webWeb oficial Modifica el valor a Wikidata

Python suporta diversos paradigmes de programació, incloent-hi programació orientada a objectes (POO), imperativa i també funcional o procedimental. Presenta un sistema dinàmic i una gestió de la memòria automàtica i té una gran i exhaustiva biblioteca estàndard.[7]

Com altres llenguatges de programació dinàmics, Python és usat sovint com a un llenguatge script, però també es fa servir en una àmplia gamma de contextos no-script. Utilitzant eines desenvolupades per tercers com Py2exe, cx Freeze o Pyinstaller,[8] el codi Python pot ser reduït a programes executables independents. Existeixen intèrprets de Python per molts sistemes operatius diferents.

CPython, la implementació de referència de Python, és programari lliure i de codi obert i té un model de desenvolupament basat en la comunitat, 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 la fundació és fomentar el desenvolupament de la comunitat 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.

HistòriaModifica

 
Guido van Rossum, el creador de Python

Python fou creat a finals dels anys 80[11] per Guido van Rossum al Centrum Wiskunde & Informatica (CWI) als Països Baixos, com a successor del llenguatge ABC (que alhora havia estat inspirat en SETL),[12] capaç de gestionar excepcions i interconnectar amb el sistema operatiu Amoeba.[13] La seva implementació va començar el desembre de l’any 1989.[14] Van Rossum va ser el principal responsable del projecte, donat que era el promotor principal en el seu desenvolupament. Aquest llenguatge va ser creat amb la intenció que fos fàcil d'utilitzar i d’aprendre sense comprometre rendiment i velocitat d’execució, però el hardware disponible a l’època de la seva creació va dificulatar el seu ús, i el projecte no va tenir la repercussió inicial que s’esperava.

El 1991, Van Rossum va publicar el codi de la versió 0.9.0 a alt.sources. En aquesta etapa del desenvolupament ja estaven presents classes amb herència, control d’excepcions, funcions i els tipus modulars tals com str, list i dict, 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 grans de la programació de Python”.[11] El model d’excepcions de Python és semblant al de Modula-3, amb l’addició d'una clàusula else.[13] L’any 1994 es va formar comp.lang.python, en el fòrum de discussió principal de Python, marcant una fita en el creixement del grup d'usuaris d’aquest llenguatge.

Python va tenir la seva versió 1.0 l’any 1994. Una característica d’aquest llançament van ser les eines de la programació funcional: lambda, reduce, filter i map. Van Rossum va explicar que 12 anys abans Python ja havia adquirit aquestes funcions, cortesia d'un hacker informàtic de Lisp que les trobava a faltar al llenguatge i les havia proporcionat.[15] Aquest donant va ser Amrit Prem; no es fa cap menció específica de cap herè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) a Reston, Virginia, on va llançar diverses versions del software.

Durant la seva estada al Corporation for National Research Initiatives (CNRI), Van Rossum va proposar la iniciativa Computer Programming for Everybody (CP4E), amb la finalitat de fer la programació 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 habilitats matemàtiques necessàries per a molts treballadors. Python va tenir un paper crucial en aquest procés degut a la seva orientació cap a una sintaxi neta i les metes de CP4E, que presentaven similituds amb el seu precedessor ABC. El projecte fou patrocinat per DARPA.[16]

L’any 2000, l’equip principal de desenvolupadors de Python es va canviar a BeOpen.com per a formar l’equip BeOpen PythonLabs. El CNRI va demanar que la versió 1.6 fos pública, continuant el seu desenvolupament fins que l’equip de desenvolupament va abandonar el CNRI. El seu programa de llançament i el de la seva 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 de Haskell: 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 per paraules 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 de software comercial, va quedar clar que l’opció d'utilitzar Python amb software disponible sota GNU GPL era molt desitjable. La llicència usada fins aquell moment, la Python License, incloïa una clàusula estipulant que la llicència estava governada per l’estat de Virgínia, pel que, sota l’òptica dels advocats de Free 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’any 2001, Van Rossum fou premiat amb el FSF Award for the Advancement of Free Software. A partir d’aquest any, tot el codi, 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), una organització 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ó del scoping més semblant a les regles de static scoping (del qual Scheme és l’originador).[19]

Una innovació major en Python 2.2 fou la unificació dels tipus de Python (tipus escrits en C), i classes (tipus escrits en Python) dins d'una jerarquia. Aquesta unificació va a conseguir un model d’objectes de Python pur i consistent.[20] També van ser agregats els generadors 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 per Java en alguns casos: el package logging,[21] introduït en la versió 2.3, està basat en log4j; el parser SAX, introduït en 2.0; el package threading,[22] on la seva classe Thread exposa un subconjunt de la interfície de la classe homònima a Java.

L’any 2007, el projecte CP4E va romandre inactiu, i mentre que Python intenta ser fàcil d’aprendre i no molt antiquat en la seva sintaxi i semàntica, arribant als no programadors, no va suposar una preocupació activa.[23]

Actualment, Van Rossum comparteix la seva directiva sent membre d'un consell directiu de cinc persones.[24][25][26] El gener de 2019, els desenvolupadors actius del nucli de Python van escollir Brett Cannon, Nick Coghlan, Barry Warsaw, Carol Willing i Van Rossum com un “Consell Directiu” de cinc membres per a continuar la direcció del projecte. Van Rossum és, doncs, l’autor principal de Python i avui dia segueix exercint un rol central decidint el rumb del llenguatge.[26]

Els intèrprets de Python estan disponibles per a diversos sistemes operatius. CPython és la implementació de referència de Python, és programari lliure i de codi obert[18] i té un model de desenvolupament basat en la comunitat, 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 de març del 2001.[27] La missió de la fundació és fomentar el desenvolupament de la comunitat de Python.[28] Aquest organisme és responsable de diversos processos dins de la comunitat, com el desenvolupament de Python, l’administració dels drets intel·lectuals i l’obtenció de fons. Python compta una llicència de codi obert, denominada Python Software Foundation License,[18] la qual és compatible amb la llicència pública general de GNU a partir de la seva versió 2.1.1, i incompatible amb versions anteriors.

Sobre l'origen de Python, el mateix Van Rossum va escriure l'any 1996:[29]

« Fa uns sis anys, pels volts del desembre de 1989, estava buscant 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 per el nou llenguatge script que havia estat pensant darrerament: un descendent d'ABC que apel·laria a Unix/C hackers. Vaig triar Python com a nom del projecte, estant en un estat d'ànim lleugerament irreverent (i un gran fan de Monty Python's Flying Circus) »
Guido van Rossum. «Foreword for "Programming Python" (1st ed.)», 1996.

Versions destacables del llenguatge:

  • Python 2.0 va ser llançat el 16 d’octubre del 2000 amb moltes novetats importants, incloent un garbage collector detector de cicles i suport per a Unicode,[30] així com un canvi en el nom de la llicència a Python Software Foundation License.
  • Python 3.0 va ser llançat el 3 de desembre de 2008. Va ser una important revisió del llenguatge, la qual no és totalment retrocompatible.[31] Moltes de les seves característiques importants van ser portades a les versions de Python 2.6.x[32] i 2.7.x. Els llançaments de Python 3 inclouen la utilitat 2to3, que automatitza (com a mínim parcialment) la traducció del codi de Python 2 a Python 3.[33]

Informació sobre versions recents:

  • Python 3.6 va portar novetats relacionades amb la implementació de CPython, tals com la reestructuració dels elements de tipus dict i que la variable d’entorn pythonmalloc es pogués utilitzar per fer depuració de la memòria de l’intèrpret.[34] També va aportar novetats quant a la llibreria estàndard, millores en seguretat, millores per a entorns de programació en sistema operatiu Windows. 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ó del sistema d’arxius i la consola de Windows a UTF-8 i nous protocols per les rutes d’arxius del sistema.[35]
  • Python 3.7 va portar novetats en el depurador tals com la incorporació de la funció interna breakpoint, el nou mòdul de dataclasses, noves APIs per a memòria local dels threads d’execució, noves funcions per al mòdul time i diccionaris ordenats per definició.[36]
  • 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 a CPython. Aquesta versió va ser la primera en no ser dirigida exclusivament per Guido van Rossum, sinó pel mencionat consell directiu dels cinc principals desenvolupadors.[26][37]
  • 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.[38]

La data de final d’ús per a Python 2.7 va ser inicialment establerta al 2015, però va ser posposada a 2020, tot i sabent que una gran part del codi existent en aquesta versió del llenguatge no serà fàcilment portada a Python 3. Actualment, una versió preliminar de Python 4.0 està sent desenvolupada, i Van Rossum adverteix que no serà tan compatible amb Python 3.0 com aquesta versió ho va ser per a 2.0.[39]

Característiques i filosofiaModifica

Descripció de funcionalitatsModifica

Python és un llenguatge de programació multiparadigma. Això significa que, més que no pas forçar als programadors a adoptar un estil particular de programació, aquest llenguatge permet diversos estils: la programació orientada a objectes i la programació estructurada estan completament suportades, i moltes de les seves característiques també suporten la programació funcional i la programació orientada a aspectes (inclòs per metaprogramació[40] i metaobjectes (mètodes màgics)).[41] També són suportats molts altres paradigmes a través d’extensions, incloent disseny per contracte[42][43] i programació lògica.[44]

Python utilitza mecanografia dinàmica, una combinació de recompte de referència i un recol·lector de brossa detector de cicles per al tractament de la memòria. També compta amb resolució dinàmica de noms, que lliga els noms del mètode i la variable durant l’execució del programa (també anomenat enllaç dinàmic de mètodes).

El disseny de Python ofereix suport per a la Programació funcional en la tradició Lisp. Les funcions filter, map, i reduce estan integrades en el llenguatge, així com les list comprehensions, els diccionaris i conjunts i les expressions generadores. La llibreria estàndard té dos mòduls (itertools i functools) que implementen eines funcionals que venen manllevades dels llenguatges de programació Haskell i Standard ML.[16]

ParadigmesModifica

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 del llenguatge és la facilitat de l’extensió, de manera que es poden escriure nous mòduls fàcilment en altres llenguatges com ara C o C++. La visió de Van Rossum d'un llenguatge amb petit nucli amb una llibreria estàndard gran i un intèrpret fàcilment extensible, van mantenir el projecte allunyat d'una de les seves frustracions amb ABC, que es centra precisament en el paradigma oposat.[11]

De la mateixa manera, Python aposta per una sintaxi i gramàtica més simples i amb menys dificultats, donant així als desenvolupadors una oportunitat per dur a terme la seva metodologia de programació. A diferència del lema de Perl “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 i autor del llibre Python, escriu que “descriure quelcom com intel·ligent no es considera un compliment en la cultura de Python”.[45]

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ència CPython, ja que oferirien increments marginals en velocitat amb el cost de la claredat del codi.[46] Quan la velocitat és important, el programador de Python pot moure funcions de temps crític a aquests mencionats mòduls d’extensió escrits en altres llenguatges, o bé utilitzar PyPy, que és un compilador sobre la marxa o just-in-time compiler. Cython també és una opció, donat que tradueix el programa directament de Python a C i fa crides directes a la 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 dels desenvolupadors de Python és mantenir el llenguatge viu i en funcionament, a través de fer-lo agradable per als programadors. Queda reflectit al nom del llenguatge —que és un tribut a la comèdia britànica Monty Python[47] i en enfocaments lúdics de tutorials i materials de referència, com per exemple fa referència a spam and eggs (d'un fragment famós de Monty Python) en comptes dels foo i bar que trobem estàndards en altres llenguatges.[48][49]

La filosofia del nucli del llenguatge queda resumida en el document The Zen of Python (PEP 20), on s’inclouen aforismes com els següents:[50]

  • 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è sigui holandè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 la comunitat de Python és pythonià o pythonic, que pot tenir una gran varietat de significats relacionats amb l’estil de programació. Diem que el codi és pythonià quan en ell s’utilitzen bé els idiomes de Python, com ara la naturalesa del codi o la mostra de fluïdesa en el llenguatge, que van en concordància amb la filosofia 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 de no pythonià o unpythonic. Seguint aquesta dinàmica, els usuaris i admiradors de Python, especialment aquells que destaquen per tenir coneixements o experiència en el llenguatge, acostumen a ser anomenats pythonistes.[51][52]

Sintaxi i semànticaModifica

El Python està dissenyat per ser un llenguatge molt visual, i, com a característica principal i distintiva, utilitza sagnat. Això és poc comú en llenguatges de programació, ja que molts (com el C o Java) utilitzen delimitadors com poden ser { i }. Això el fa més llegible.

SagnatModifica

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.[53] S'inclou una comparació amb el Java per exemplificar-ho.

Hola món en Python Hola món en Java
def main():
    print("Hola, món!")
public class HolaMon {
      public static void main(String[] args) {
          System.out.println("Hola, món!");
      }
 }

o bé: (nota: aquesta sintaxi és possible. Tanmateix, no s'acostuma a utilitzar a causa de la poca llegibilitat).

public class HolaMon { public static void main(String[] args) { System.out.println("Hola, món!"); } }

InstruccionsModifica

Algunes de les instruccions de Python són:

  • La instrucció 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 en anglè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 = 3
    if x == 0: # Si x és 0
       print('x és 0')
    elif x == 2: # Si x és 2
       print('x és 2')
    else: # Si x no és 0 ni 2
       print('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.
  • La instrucció 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.
  • La instruccióclass, que crea una classe. S'utilitza en programació orientada a objectes.
  • La instrucció def, que defineix una subrutina o un mètode (funció).
  • La instrucció with (a partir del Python 2.6).
  • La instrucció pass, que no efectua cap operació i es pot utilitzar en lloc d'un bloc de codi.
  • La instrucció assert, que s'utilitza en depuració per comprovar que es compleixin certes condicions.
  • La instrucció yield, que retorna un valor per ser utilitzat en un generador.

ExpressionsModifica

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ò la divisió no. Hi ha dos tipus de divisions en Python. Divisió sencera // i divisió de punt flotant /.[54]A més a més, Python va afegir ** com a operador per exponenciació. Per trobar el mòdul d'una divisió, és a dir, el residu existeix l'operador %.
  • Desde Python 3.5, @es va introduir aquest nou operador, destinat a ser utilitzat per llibreries com NumPy per a la multiplicació de matrius.[55][56]
  • En el llenguatge Python, == es compara per valor, mentre que Java compara números per valor [57] i els objectes per referència.[58] L' operador is de Python es pot utilitzar per comparar identitats d'objectes. En Python les comparacions es poden fer encadenades, per exemple a <= b <= c . Un altre operador és != que significa "diferent", és a dir, a != b significa a diferent de b.
  • Python utilitza les paraules and, or, not en els operadors booleans en lloc del simbòlic &&,||, ! utilitzats a Java i C.
  • Python té un tipus d’expressió anomenada "List comprehension". Python 2.4 va estendre aquesta expressió amb una expressió més general anomenada expressió generadora.[59]
  • Les expressions condicionals de Python s’escriuen com x if c else y [60] això significa que val x en cas que sigui c sino val y y [77].
  • Python fa una distinció entre llistes i tuples. 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.[61]
  • Python té diferents tipus de cadenes de caràcter:
    • Cadenes delimitades per cometes simples o dobles. A diferència dels shells de Unix, els llenguatges influenciats per Perl, les cometes simples i dobles funcionen de manera idèntica.[62]
    • 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 les llistes i tuples, Python conté un tipus d’estructura de dades anomenada diccionaris, 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 o matrius per trobar elements, Python té índex de matrius i també array slicing en llistes expressats coma[index], a[inici:final] o a[inici:final:pas].[63] Els indexos negatius permeten indexar de manera inversa, és a dir, començant pel final. Els indexos positius van de 0 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 escrivim a[:] retorna una copia de la llista sencera, o a[2:] retorna una copia superficial de la llista desde la posició 2 fins al final.

MètodesModifica

Els mètodes a Python són les funcions que es defineixen com un bloc de codi referenciat per un nom de funció, amb el que permetrem trucar a la funció desde 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.[64]

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

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

def nom_funcio(x):
    x = x + 1
    return x

ClassesModifica

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ó de classes amb el que 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.[66] 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 clau self que fa referència a l'objecte. Amb aquesta paraula, indiquem que tot es modifica sobre l'objecte creat en la instància.[67]

Amb tot això, la sintaxi per definir una clase és:

class nom_classe:
    def __init__(self):
        #Aqui posem les característiques com per exemple:
        self.nom = 'Python'

    #Aqui podem definir els mètodes de funcionalitat

EscripturaModifica

Python utilitza la duck typing,[68] aplicant aquest concepte a objectes. Les restriccions de tipus no es verifiquen en temps 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).

Python permet als programadors definir els seus propis tipus utilitzant classes, que s'utilitzen més usualment en la programació orientada a objectes.

Abans de la versió 3.0, Python tenia dos tipus de classes: d'estil antic i de nou estil.[69] La sintaxis dels dos estils era la mateixa, la diferència és que la classe object heredava directament o indirecta. Les classes d'estil antic van ser eliminades en Python 3.0

Tipus Mutabilitat Descripció Exemples de sintaxi
bool No Valor booleà TrueFalse
bytes No Seqüència de bytes b'Some ASCII'b"Some ASCII"bytes([119, 105, 107, 105])
complex No Nombre complex amb parts reals e imaginàries. 3+2.7j
dict Matriu associativa (o diccionari) de parelles clau i valor; pot contenir tipus mixtos (claus i valors), les claus han de ser de tipus hashable {'key1': 1.0, 3: False}{}
ellipsis No Un marcador de posició de punts suspensius per a utilitzar com índex en matrius NumPy ...Ellipsis
float No Número de coma flotant de precisió doble. La precisió depèn de la màquina, però en la pràctica és de 64 bits. 3.1415927
frozenset No Resum dels tipus integrats de Python 3. Conjunt desordenat, no conté duplicats; pot contenir tipus mixtos, si són hashables frozenset([4.0, 'string', True])
int No Enter de magnitud il·limitada 42
list Llista, pot contenir tipus mixtos [4.0, 'string', True][]
NoneType No Un objecte que representa la falta d'un valor, sovint anomenat Nul en altres idiomes. None
NotImplementedType No Un marcador de posició que els operadors sobrecarregats poden retornar per indicar tipus de operands no compatibles. NotImplemented
range No Una seqüència de números utilitzada per recórrer un número específic de vegades en buclesfor[70] range(1, 10)range(10, -5, -2)
set Resum dels tipus integrats de Python 3. Conjunt desordenat, no conté duplicats; pot contenir tipus mixtos, si són hashables {4.0, 'string', True}set()
str No Una cadena de caràcters : seqüència de punts de codi Unicode 'Wikipedia'"Wikipedia"
""" Pot utilitzar 
varies 
línias """
tuple No Pot contenir tipus mixtos (4.0, 'string', True)('single element',)()

Programes d'exempleModifica

Aquest programa imprimeix "Hola món" al dispositiu de sortida predeterminat (normalment la consola),

 print('Hola món')

Programa que ens mostra per pantalla quins son els elements d'una llista amb un bucle iteratiu for:

l = [1, 'Paris', 3, (8, 9), 5]

for i in l:
	print(i)

Alternativament:

l = [1, 'Paris', 3, (8, 9), 5]

longitud = len(l)

for i in range(0, longitud):
	print(l[i])

Programa per calcular el factorial d'un nombre natural:

n = int(input('Escriu un nombre natural, llavors el seu factorial serà mostrat per pantalla: ')

if n < 0:
	raise ValueError('Cal que sigui un nombre natural (sencer i positiu)')
	
fact = 1; i = 2

while i <= n:
	fact *= i
	i += 1
print(fact)

Funció recursiva que calcula la successió de fibonacci utilitzant control d’errors assert:

n = int(input('Introdueix un nombre natural: '))

assert type(n) == int and n >= 0, 'Ha de ser un nombre natural'

def fibonacci(n):
	if(n == 0):
		n = 0
	elif(n == 1):
		n = 1
	else:
		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))

Llibreries en PythonModifica

Llibreria estàndardModifica

El Python té una llibreria estàndard gran, que tot sovint se cita com una de les principals fortaleses del Python.[71] Aporta eines ja programades que poden fer una gran varietat de funcions. S'ha dit que el Python té "piles incloses".[72] Els mòduls de la llibreria 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 un "llenguatge de cola" molt potent entre eines i llenguatges.

La llibreria estàndard està particularment ben encarada per escriure aplicacions dirigides a Internet, amb una gran quantitat de formats estàndards i protocols (com per exemple MIME i HTTP). També inclou mòduls per crear interfícies gràfiques d'usuari, connectar a bases de dades relacionals o manipular expressions regulars.[73] La llibreria estàndard, però, no és essencial per utilitzar el Python o incrustar-lo en altres aplicacions. El Blender 2.49, per exemple, n'omet la major part.

Gestió de llibreriesModifica

Tot i que la llibreria estàndard de Python és un dels punts forts d’aquest llenguatge de programació, degut a 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 llibreries per a realitzar tasques específiques.

El repositori oficial de Python és el Python Package Index, abreviat com PyPI. Col·loquialment es coneix com a Cheese Shop, fent referència a un sketch còmic dels Monty Python. Alberga més de 200.000 llibreries diferents.[74] Degut a la gran varietat de llibreries disponibles, normalment s’utilitzen gestors (package managers en anglès) per afegir aquestes llibreries a una instal·lació de Python.

pipModifica

pip és el gestor de 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 llibreria s'haurà d'introduir la següent comanda per terminal (linux):

pip install <package>

Una de les característiques principals d’aquest gestor és la possibilitat de crear entorns virtuals amb versions específiques d’algunes llibreries. Això permet crear còpies idèntiques de grups sencers de paquets en altres ordinadors de manera senzilla i eficient. PyPI instal·la les llibreries com arxius comprimits wheel (.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 de l'arxiu està establert per la proposta de millora de Python 427 (Python Enhancement Proposals) o PEP 427.[75]

condaModifica

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 llibreries. Avui dia és utilitzat principalment per gestionar llibreries de Python i R, i està recolzada per la companyia Anaconda Inc.[76] La gran diferència respecte de pip és la gestió de conflictes entre dependències de diferents llibreries, 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 un compilador 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 llibreria s'haurà d'introduir la següent comanda per terminal, un cop instal·lat el gestor:[77]

conda install <package>

Entorns de desenvolupamentModifica

La gran majoria de les implementacions de Python (incloent CPython) inclouen un bucle llegeix-avalua-mostra (REPL, per les seves sigles en anglès), permetent-los funcionar com un intè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, incloent IDLE, byPython i iPython, 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 els escriptoris estàndard integraven entorns de desenvolupament, van anar apareixent IDEs basades en entorns web. Alguns d’ells podríen ser SageMath (pensat per desenvolupar programes de Python relacionats amb la ciència i les matemàtiques); PythonAnywhere, un entorn basat amb IDE basat en navegador; Canopy IDE, un IDE comercial de Python fent èmfasi en les ciències de la computació;[78] Jupyter Notebook, amb una interfície basada en navegador 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 en servidors d’aquesta companyia.

ImplementacionsModifica

CPythonModifica

Article principal: CPython

La implementació principal del Python, coneguda com a CPython, està escrita en C, satisfent l'estàndard C89.[79] El CPython compila els programes Python en un bytecode intermedi,[80] que posteriorment s'executa per la màquina virtual.[81] Es distribueix amb una llibreria estàndard força gran escrita en una barreja de C i Python. Té versions per moltes plataformes, incloent Microsoft Windows i la major part dels sistemes Unix-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 com Unix i Mac OS, ha ajudat en aquest aspecte.[82] El 2009 Google va començar un projecte anomenat Unladen Swallow amb l'objectiu d'incrementar la velocitat de l'interpretador Python unes cinc vegades.[83]

DesenvolupamentModifica

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.[84] L’estil de codificació de Python es troba recollit a PEP 8.[85] Els PEP excepcionals són revisats i comentats per la comunitat Python i el consell directiu.[84]

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 al sistema de seguiment d'errors Roundup allotjat a bugs.python.org.[86] El desenvolupament va tenir lloc inicialment en un repositori de codi font que s'allotjava a Mercurial fins que Python es va traslladar a GitHub el gener de 2017.[87]

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 freqüentment, 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.[88]
  • 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.[89]

Python 3.9 alpha1 es va anunciar al novembre de 2019[38] i amb l'adopció d'una nova cadència de llançament anual,[90][91] el primer llançament de 3.9 està previst per a novembre de 2020.[92]

Molts candidats alfa, 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 varies proves unitàries durant el desenvolupament i utilitzant el sistema d'integració contínua BuildBot.[93]

La comunitat de desenvolupadors de Python també ha contribuït amb més de 206.000[94] 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 és PyCon. També hi ha programes especials de mentoria Python, com ara Pyladies.

NomModifica

El nom de Python deriva del grup de comèdia britànic Monty Python, que el creador de Python, Guido van Rossum, va gaudir mentre desenvolupava el llenguatge. Les referències de Monty Python apareixen freqüentment en el codi i cultura de Python;[95] per exemple, les variables metàstiques que s'utilitzen sovint en la literatura de Python són "spam" i "eggs" en lloc dels foobar tradicionals.[95][96] La documentació oficial de Python també conté diverses referències a les rutines de Monty Python.[97][98]

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 inclouen Pygame, una vinculació de SDL a Python (usada habitualment per crear jocs); PyQt i PyGTK, que uneixen Qt i GTK a Python respectivament; i PyPy, una implementació Python escrita originalment en Python.

Generadors de documentació de l'APIModifica

Els generadors de documentació de l'API Python inclouen:

  • Sphinx
  • Epydoc
  • HeaderDoc
  • Pydoc

UsosModifica

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 de Java i C).[99] Va ser seleccionat Llenguatge de programació de l'any el 2007, 2010 i 2018.[100]

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 ++ ".[101]

Les grans organitzacions que utilitzen Python inclouen Wikipedia, Google,[102] Yahoo!,[103] CERN,[104] NASA,[105] Facebook,[106] Amazon, Instagram,[107] Spotify[108] i algunes entitats més petites com ILM.[109] El lloc de xarxes socials Reddit està escrit completament a Python.[110]

Python pot servir com a llenguatge script per a aplicacions web, per exemple, a través de mod wsgi per al servidor web Apache.[111] Amb la Web Server Gateway Interface, una API estàndard ha evolucionat per facilitar aquestes aplicacions. Els entorns de treball per a aplicacions web com Django, Pylons, Pyramid, TurboGears, web2py, Tornado, Flask, Bottle i Zope donen suport als desenvolupadors en el disseny i manteniment d’aplicacions complexes. Pyjs i IronPython es poden utilitzar per desenvolupar la part del client de les aplicacions basades en Ajax. SQLAlchemy es pot utilitzar com a mapejador de dades a una base de dades relacional. Twisted és un entorn de treball per programar comunicacions entre ordinadors i que és utilitzat (per exemple) per Dropbox.

Biblioteques com NumPy, SciPy i Matplotlib permeten l'ús eficaç de Python en computació científica,[112][113] amb biblioteques especialitzades com Biopython i Astropy proporcionant funcionalitat específica del domini. SageMath és un programari matemàtic amb una interfície de quaderns programable a Python: la seva biblioteca cobreix molts aspectes de les matemàtiques, incloent àlgebra, combinatòria, anàlisi numèrica, teoria de nombres i càlcul.

Python s’ha incrustat amb èxit en molts productes de programari com a llenguatge script, inclòs en programari d'anàlisi d’elements finits com Abaqus, modelador de CAD 3D com FreeCAD, paquets d’animació 3D com 3ds Max, Blender, Cinema 4D, Lightwave, Houdini, Maya, Modo , MotionBuilder, Softimage, el compositor d’efectes visuals Nuke, programes d’imatge en 2D com GIMP,[114] Inkscape, Scribus i Paint Shop Pro,[115] i programes de notació musical com a editors de partitures i capella. GNU Debugger utilitza Python per mostrar estructures complexes com ara contenidors C ++. Esri promou Python com la millor opció per escriure guions a ArcGIS.[116] També s'ha utilitzat en diversos videojocs,[117][118] i s'ha adoptat com a primer dels tres llenguatges de programació disponibles a Google App Engine, els altres dos són Java i Go.[119]

Python s'utilitza habitualment en projectes d'intel·ligència artificial amb l'ajut de biblioteques com TensorFlow, Keras, Pytorch i Scikit-learn.[120][121][122][123] Com a llenguatge script amb programació modular, sintaxi senzilla i eines de processament de text enriquit, Python s'utilitza sovint per al processament de llenguatge natural.[124]

Molts sistemes operatius inclouen Python com a component estàndard. S'ofereix amb la majoria de distribucions Linux,[125] AmigaOS 4, FreeBSD (com a paquet), NetBSD, OpenBSD (com a paquet) i macOS i es pot utilitzar des de la línia d'ordres (terminal). Moltes distribucions de Linux utilitzen instal·ladors escrits a Python: Ubuntu utilitza l’instal·lador Ubiquity, mentre que Red Hat Linux i Fedora utilitzen el programari Anaconda. Gentoo Linux utilitza Python en el seu sistema de gestió de paquets, Portage.

Python s'utilitza àmpliament en la indústria de la seguretat de la informació, inclòs en el desenvolupament d'exploits.[126][127]

La major part del programari Sugar per a Un portàtil per nen/a XO (OLPC) , actualment desenvolupat a Sugar Labs, està escrit a Python.[128] El projecte SBC Raspberry 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[129] des de la versió 4.0 des del 7 de febrer de 2013.

ReferènciesModifica

  1. TIOBE Software Index. «TIOBE Programming Community Index Python», 2012. [Consulta: 14 juliol 2011].
  2. «Programming Language Trends - O'Reilly Radar». Radar.oreilly.com, 02-08-2006. [Consulta: 14 juliol 2011].
  3. «The RedMonk Programming Language Rankings: January 2013 – tecosystems». Redmonk.com, 28-02-2013. [Consulta: 17 juliol 2013].
  4. 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» 
  5. Code Complete, p. 100. 
  6. Kuhlman, Dave. «A Python Book: Beginning Python, Advanced Python, and Python Exercises».
  7. «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.»
  8. «PyInstaller Home Page». [Consulta: 27 gener 2014].
  9. Python Software Foundation Launched
  10. Mission Statement of the Python Programari Foundation
  11. 11,0 11,1 11,2 «The Making of Python». [Consulta: 1r abril 2020].
  12. van Rossum, Guido. «SETL (was: Lukewarm about range literals)». Llista de correu Python-Dev, 29-08-2000. [Consulta: 13 març 2011].
  13. 13,0 13,1 «General Python FAQ — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  14. Rossum, Guido Van. «The History of Python: A Brief Timeline of Python», 20-01-2009. [Consulta: 1r abril 2020].
  15. «Interview with Guido van Rossum (July 1998)», 23-08-2007. [Consulta: 1r abril 2020].
  16. 16,0 16,1 «itertools — Functions creating iterators for efficient looping — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  17. 17,0 17,1 «What's New in Python 2.0», 29-03-2007. [Consulta: 1r abril 2020].
  18. 18,0 18,1 18,2 «History and License — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  19. «PEP 227 -- Statically Nested Scopes» (en anglès). [Consulta: 1r abril 2020].
  20. 20,0 20,1 «What’s New in Python 2.2 — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  21. «PEP 282 -- A Logging System» (en anglès). [Consulta: 1r abril 2020].
  22. «threading — Thread-based parallelism — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  23. «Computer Programming for Everybody», 12-03-2007. [Consulta: 1r abril 2020].
  24. «Guido van Rossum Stepping Down from Role as Python's Benevolent Dictator For Life | Linux Journal». [Consulta: 1r abril 2020].
  25. «The Inquirer». [Consulta: 1r abril 2020].
  26. 26,0 26,1 26,2 «PEP 8100 -- January 2019 steering council election» (en anglès). [Consulta: 1r abril 2020].
  27. «Python Software Foundation: Press Release 6-Mar-2001» (en anglès). [Consulta: 1r abril 2020].
  28. «Mission» (en anglès). [Consulta: 1r abril 2020].
  29. Guido van Rossum. «Foreword for "Programming Python" (1st ed.)», 1996. [Consulta: 10 juliol 2014].
  30. «What’s New in Python 2.0 — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  31. «Python 3.0 Release» (en anglès). [Consulta: 1r abril 2020].
  32. «PEP 3000 -- Python 3000» (en anglès). [Consulta: 1r abril 2020].
  33. «2to3 - Automated Python 2 to 3 code translation — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  34. «What's New in Python 3.6 ? | New Features in Python 3.6» (en anglès), 17-03-2018. [Consulta: 1r abril 2020].
  35. «What’s New In Python 3.6 — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  36. «What’s New In Python 3.7 — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  37. «What’s New In Python 3.8 — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  38. 38,0 38,1 «What’s New In Python 3.9 — Python 3.9.0a5 documentation». [Consulta: 1r abril 2020].
  39. SHavtikova, L.M. «Using Python to schedule graphics». SCIENTIFIC DEVELOPMENT TRENDS AND EDUCATION, 2019. DOI: 10.18411/lj-12-2019-30.
  40. «Wayback Machine», 30-05-2009. [Consulta: 1r abril 2020].
  41. «Data model — Python v3.0.1 documentation». [Consulta: 1r abril 2020].
  42. «Contracts for Python». [Consulta: 1r abril 2020].
  43. «Contracts for Python». [Consulta: 1r abril 2020].
  44. «pyDatalog». [Consulta: 1r abril 2020].
  45. Ascher, Alex Martelli, Anna Ravenscroft, David. Python Cookbook (en anglès). ISBN 978-0-596-00797-3. 
  46. «ebeab.com». [Consulta: 1r abril 2020].
  47. «General Python FAQ — Python 2.7.17 documentation». [Consulta: 1r abril 2020].
  48. «15 aspectes en què Python és una força important a la Web».
  49. «8.18. pprint — Data pretty printer — Python 2.7.17 documentation». [Consulta: 1r abril 2020].
  50. «PEP 20 -- The Zen of Python» (en anglès). [Consulta: 1r abril 2020].
  51. «Programa com un Pythonista: Python idiomàtic».
  52. «Com pensar com un Pythonista».
  53. «Is Python a good language for beginning programmers?». General Python FAQ. Python Foundation, 07-03-2005. [Consulta: 21 març 2007].
  54. «3.8.2 Documentation». [Consulta: 1r abril 2020].
  55. «PEP 465 -- A dedicated infix operator for matrix multiplication» (en anglès). [Consulta: 1r abril 2020].
  56. «Python Release Python 3.5.1» (en anglès). [Consulta: 1r abril 2020].
  57. «Chapter 15. Expressions». [Consulta: 1r abril 2020].
  58. «Chapter 15. Expressions». [Consulta: 1r abril 2020].
  59. «PEP 289 -- Generator Expressions» (en anglès). [Consulta: 1r abril 2020].
  60. «PEP 308 -- Conditional Expressions» (en anglès). [Consulta: 1r abril 2020].
  61. «Built-in Types — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  62. «PEP 498 -- Literal String Interpolation» (en anglès). [Consulta: 1r abril 2020].
  63. «15 Extended Slices». [Consulta: 1r abril 2020].
  64. «7.5 Function definitions». [Consulta: 1r abril 2020].
  65. «2.3 Built-in Functions». [Consulta: 1r abril 2020].
  66. «9. Classes — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  67. «9. Classes — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  68. «Duck Typing». [Consulta: 2 abril 2020].
  69. «3. Data model — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  70. «Built-in Types — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  71. Przemyslaw Piotrowski, Build a Rapid Web Development Environment for Python Server Pages and Oracle, Oracle Technology Network, juliol de 2006. Accedit el 21 d'octubre de 2008.
  72. «About Python». python.org. Python Software Foundation. [Consulta: 27 juny 2009].
  73. «PEP 327 - Decimal Data Type». Python.org. [Consulta: 24 novembre 2008].
  74. «PyPI · The Python Package Index» (en anglès). [Consulta: 31 març 2020].
  75. «PEP 427 -- The Wheel Binary Package Format 1.0» (en anglès). [Consulta: 31 març 2020].
  76. «Conda — Conda documentation». [Consulta: 31 març 2020].
  77. «Understanding Conda and Pip» (en anglès), 28-11-2018. [Consulta: 31 març 2020].
  78. «Canopy IDE».
  79. «PEP 7 - Style Guide for C Code». Python.org. [Consulta: 24 novembre 2008].
  80. CPython byte code
  81. Python 2.5 internals
  82. «O'Reilly - An Interview with Guido van Rossum». Oreilly.com. [Consulta: 24 novembre 2008].
  83. ProjectPlan, Plans for optimizing Python - unladen-swallow
  84. 84,0 84,1 «PEP 1 -- PEP Purpose and Guidelines» (en anglès). [Consulta: 1r abril 2020].
  85. «PEP 8 -- Style Guide for Python Code» (en anglès). [Consulta: 1r abril 2020].
  86. «Guido, Some Guys, and a Mailing List: How Python is Developed», 01-06-2009. [Consulta: 1r abril 2020].
  87. «Python Developer’s Guide — Python Developer's Guide». [Consulta: 1r abril 2020].
  88. Norwitz, Neal. «[Python-Dev Release Schedules (was Stability & change)]», 08-04-2002. [Consulta: 1r abril 2020].
  89. «PEP 6 -- Bug Fix Releases» (en anglès). [Consulta: 1r abril 2020].
  90. «PEP 602 -- Annual Release Cycle for Python» (en anglès). [Consulta: 1r abril 2020].
  91. «Changing the Python release cadence [LWN.net]». [Consulta: 1r abril 2020].
  92. «PEP 596 -- Python 3.9 Release Schedule» (en anglès). [Consulta: 1r abril 2020].
  93. «Python Buildbot» (en anglès). [Consulta: 1r abril 2020].
  94. «Modulecounts». [Consulta: 1r abril 2020].
  95. 95,0 95,1 «1. Whetting Your Appetite — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  96. «coding style - In Python, should I use else after a return in an if block?». [Consulta: 1r abril 2020].
  97. «Learning python: powerful object-oriented programming (en anglès)». [Consulta: 1r abril 2020].
  98. Fehily, Chris. Python (en anglès). Peachpit Press, 2002. ISBN 978-0-201-74884-0. 
  99. «index | TIOBE - The Software Quality Company». [Consulta: 1r abril 2020].
  100. «TIOBE Programming Community Index Python». [Consulta: 1r abril 2020].
  101. «"An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl"» (en anglès). Prechelt, Lutz, 14-03-2000. [Consulta: 1r abril 2020].
  102. «Quotes about Python» (en anglès). [Consulta: 1r abril 2020].
  103. «OrganizationsUsingPython - Python Wiki». [Consulta: 1r abril 2020].
  104. «Python : the holy grail of programming». [Consulta: 1r abril 2020].
  105. «Python Success Stories» (en anglès). [Consulta: 1r abril 2020].
  106. «Tornado: Facebook's Real-Time Web Framework for Python» (en anglès). [Consulta: 1r abril 2020].
  107. «What Powers Instagram: Hundreds of Instances, Dozens of Technologies» (en anglès). [Consulta: 1r abril 2020].
  108. Meer, Geoff van der. «How we use Python at Spotify» (en anglès), 20-03-2013. [Consulta: 1r abril 2020].
  109. «Python Success Stories» (en anglès). [Consulta: 1r abril 2020].
  110. «reddit-archive/reddit», 01-04-2020. [Consulta: 1r abril 2020].
  111. «Usage Statistics and Market Share of Python for Websites, April 2020». [Consulta: 1r abril 2020].
  112. «Python for Scientific Computing» (en anglès), 01-12-2011. [Consulta: 1r abril 2020].
  113. «CSDL | IEEE Computer Society». [Consulta: 1r abril 2020].
  114. «GIMP - Windows installers», 17-07-2013. [Consulta: 1r abril 2020].
  115. «jasc psp9components» (en anglès). [Consulta: 1r abril 2020].
  116. «ArcGIS Desktop Help 9.2 - About getting started with writing geoprocessing scripts». [Consulta: 1r abril 2020].
  117. «Stackless Python 2.7» (en anglès), 24-08-2010. [Consulta: 1r abril 2020].
  118. «Civilization IV», 02-12-2010. [Consulta: 1r abril 2020].
  119. «Python Language Guide (v1.0)» (en anglès). [Consulta: 1r abril 2020].
  120. «TensorFlow: Large-scale machine learning on heterogeneous systems (PDF)» (en anglès). [Consulta: 1r Abril 2020].
  121. «Python eats away at R: Top Software for Analytics, Data Science, Machine Learning in 2018: Trends and Analysis» (en anglès). [Consulta: 1r abril 2020].
  122. «Who is using scikit-learn? — scikit-learn 0.22.2 documentation». [Consulta: 1r abril 2020].
  123. «Google supercharges machine learning tasks with TPU custom chip» (en anglès). [Consulta: 1r abril 2020].
  124. «Natural Language Toolkit — NLTK 3.5b1 documentation». [Consulta: 1r abril 2020].
  125. «2. Using Python on Unix platforms — Python 3.8.2 documentation». [Consulta: 1r abril 2020].
  126. «IMMUNITY : Knowing You're Secure», 16-02-2009. [Consulta: 1r abril 2020].
  127. «Core Security». [Consulta: 1r abril 2020].
  128. «What is Sugar? - Sugar Labs». [Consulta: 1r abril 2020].
  129. «Download LibreOffice | LibreOffice - Free Office Suite - Fun Project - Fantastic People». [Consulta: 1r abril 2020].

Error de citació: L'etiqueta <ref> amb el nom "faq-created" definida a <references> no s'utilitza en el text anterior.
Error de citació: L'etiqueta <ref> amb el nom "98-interview" definida a <references> no s'utilitza en el text anterior.
Error de citació: L'etiqueta <ref> amb el nom "AutoNT-1" definida a <references> no s'utilitza en el text anterior.
Error de citació: L'etiqueta <ref> amb el nom "classmix" definida a <references> no s'utilitza en el text anterior.
Error de citació: L'etiqueta <ref> amb el nom "AutoNT-2" definida a <references> no s'utilitza en el text anterior.
Error de citació: L'etiqueta <ref> amb el nom "AutoNT-3" definida a <references> no s'utilitza en el text anterior.
Error de citació: L'etiqueta <ref> amb el nom "AutoNT-4" definida a <references> no s'utilitza en el text anterior.

Error de citació: L'etiqueta <ref> amb el nom "AutoNT-5" definida a <references> no s'utilitza en el text anterior.

Articles relacionatsModifica

BibliografiaModifica

Enllaços externsModifica