Python

Python és un llenguatge de programació d'alt nivell i propòsit general molt utilitzat. 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. També proveeix estructures per permetre programes més entenedors tant a petita com a gran escala.

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.

Com altres llenguatges de programació dinàmics, Python és usat sovint com 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, 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. La missió de la fundació és fomentar el desenvolupament de la comunitat Python. É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òria 

Python fou creat a finals dels anys 80 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), capaç de gestionar excepcions i interconnectar amb el sistema operatiu Amoeba. La seva implementació va començar el desembre de l'any 1989. Van Rossum va ser el principal responsable del projecte, atès 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 maquinari disponible a l'època de la seva creació va dificultar 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”. El model d'excepcions de Python és semblant al de Modula-3, amb l'addició d'una clàusula else. 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. 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 a causa de la seva orientació cap a una sintaxi neta i les metes de CP4E, que presentaven similituds amb el seu predecessor ABC. El projecte fou patrocinat per DARPA.

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

Posteriorment a aquest doble llançament, i després que Van Rossum abandonés el CNRI per treballar amb desenvolupadors de programari 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. 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).

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. També van ser agregats els generadors que van ser inspirats pel llenguatge Icon. 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, introduït en la versió 2.3, està basat en log4j; el parser SAX, introduït en 2.0; el package threading, 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 gaire antiquat en la seva sintaxi i semàntica, arribant als no programadors, no va suposar una preocupació activa.

Actualment, Van Rossum comparteix la seva directiva sent membre d'un consell directiu de cinc persones. 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.

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 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. La missió de la fundació és fomentar el desenvolupament de la comunitat de Python. 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, 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:

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, 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. Moltes de les seves característiques importants van ser portades a les versions de Python 2.6.x 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.

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

Característiques i filosofia

Descripció de funcionalitats 
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ó i metaobjectes (mètodes màgics)). També són suportats molts altres paradigmes a través d'extensions, incloent disseny per contracte i programació lògica.

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.

Paradigmes 
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 se centra precisament en el paradigma oposat.

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

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. 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ó, atès que tradueix el programa directament de Python a C 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 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— 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.

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:

 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 neerlandè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.

Sintaxi i semàntica 
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.

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

{| class=wikitable style="width:75%;"
! width="33%" | Hola món en Python
! width="33%" |Hola món en Java
|-
| width="33%" | def main():
    print("Hola, món!")
| width="33%" | 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!"); } }
|}

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

Expressions 
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 /. 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 llibreries com NumPy per a la multiplicació de matrius.
 En el llenguatge Python, == es compara per valor, mentre que Java compara números per valor  i els objectes per referència. 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.
 Les expressions condicionals de Python s'escriuen com x if c else y  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.
 Python té diferents tipus de cadenes de caràcter:
 Cadenes delimitades per cometes simples o dobles. A diferència dels shells d'Unix, els llenguatges influenciats per Perl, les cometes simples i dobles funcionen de manera idèntica.
 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]. 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 des de la posició 2 fins al final.

Mètodes 
Els mètodes a Python són les funcions 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.

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.

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

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

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

Escriptura 
Python utilitza la duck typing, 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. 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

Programes d'exemple 
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 són 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 Python

Llibreria estàndard 
El Python té una llibreria estàndard gran, que tot sovint se cita com una de les principals fortaleses del Python. Aporta eines ja programades que poden fer una gran varietat de funcions. S'ha dit que el Python té "piles incloses". 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. 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 llibreries 
Tot i que la llibreria estàndard de Python és un dels punts forts d'aquest llenguatge 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 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. 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.

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

conda 
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. 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:conda install <package>

Entorns de desenvolupament 
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ó; 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.

Implementacions

CPython 

La implementació principal del Python, coneguda com a CPython, està escrita en C, satisfent l'estàndard C89. El CPython compila els programes Python en un bytecode intermedi, que posteriorment s'executa per la màquina virtual. 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. 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.

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

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

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

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

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.

La comunitat de desenvolupadors de Python també ha contribuït amb més de 206.000 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.

Nom 
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 sovint en el codi i cultura de Python; 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. La documentació oficial de Python també conté diverses referències a les rutines de Monty Python.

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'API 
Els generadors de documentació de l'API Python inclouen:

 Sphinx
 Epydoc
 HeaderDoc
 Pydoc

Usos 
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). Va ser seleccionat Llenguatge de programació de l'any el 2007, 2010 i 2018.

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 ++ ".

Les grans organitzacions que utilitzen Python inclouen Wikipedia, Google, Yahoo!, CERN, NASA, Facebook, Amazon, Instagram, Spotify i algunes entitats més petites com ILM. El lloc de xarxes socials Reddit està escrit completament a Python.

Python pot servir com a llenguatge script per a aplicacions web, per exemple, a través de mod wsgi per al servidor web Apache. 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, 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, Inkscape, Scribus i Paint Shop Pro, 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. També s'ha utilitzat en diversos videojocs, 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.

Python s'utilitza habitualment en projectes d'intel·ligència artificial amb l'ajut de biblioteques com TensorFlow, Keras, Pytorch i Scikit-learn. 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.

Molts sistemes operatius inclouen Python com a component estàndard. S'ofereix amb la majoria de distribucions Linux, 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.

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. 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 des de la versió 4.0 des del 7 de febrer de 2013.

Referències

Vegeu també 
 IDLE (Python)
 Spyder (programari)
 AsciiDoc

Bibliografia 
 
 
 }

Enllaços externs 

 La web de Python 
 Python en altres plataformes 
 Scripting Layer for Android / Python per a l'Android 
 Introducció al Python a l'Android  

 
Llenguatges de programació orientats a objectes