Python

De WikiLingua.net

Per al míssil vegi's RAFAEL Python.
Python
Paradigma: multiparadigma
Va aparèixer en: 1990
Dissenyat per: Guido van Rossum
Última versió: 2.5.2 (febrer 2008)
Tipus de dada: fort, dinàmic
Implementaciones: CPython, Jython, IronPython, PyPy
Influït per: ABC, TCL, Perl, Modula-3, Smalltalk
Ha influït: Ruby, Boo

Python és un llenguatge de programació creat per Guido van Rossum en l'any 1990.[1]

És comparat habitualment amb TCL, Perl, Scheme, Java i Ruby. En l'actualitat Python es desenvolupa com un projecte de codi obert, administrat per la Python Programari Foundation. L'última versió estable del llenguatge és actualment la 2.5.2 (22 de febrer de 2008) (Es va anunciar l'arribada de la versió 3.0 per a agost de 2008).

Python és considerat com la "oposició leal" a Perl, llenguatge amb el qual manté una rivalitat amistosa. Els usuaris de Python consideren a aquest molt més net i elegant per a programar.

Python permet dividir el programa en mòduls reutilizables des d'altres programes Python. Ve amb una gran col·lecció de mòduls estàndard que es poden utilitzar com base dels programes (o com exemples per a començar a aprendre Python). També hi ha mòduls inclosos que proporcionen I/S de fitxers, cridades al sistema, sockets i fins a interfaces a GUI (interfaz gràfica amb l'usuari) com Tk, GTK, Qt entre uns altres...

Python és un llenguatge interpretat, el que estalvia un temps considerable en el desenvolupament del programa, doncs no és necessari compilar ni enllaçar. L'intèrpret es pot utilitzar de manera interactiva, el que facilita experimentar amb característiques del llenguatge, escriure programes desechables o provar funcions durant el desenvolupament del programa. També és una calculadora molt útil.

El nom del llenguatge prové de l'afició del seu creador original, Guido van Rossum, pels humoristes britànics Monty Python.[2] El principal objectiu que persegueix aquest llenguatge és la facilitat, tant de lectura, com de disseny.

Taula de continguts

[editar] Història

Python va ser creat a la fi dels vuitanta[3] per Guido van Rossum en CWI en els Països Baixos com un successor del llenguatge de programació ABC, capaç de manejar excepcions i interactuar amb el sistema operatiu Amoeba[4] .

Van Rossum és el principal autor de Python, i el seu continu rol central a decidir l'adreça de Python és reconegut, referint-se a ell com Benevolente dictador vitalici o Benevolent Dictator for Life (BDFL).

En 1991, van Rossum va publicar el codi (versió 0.9.0) en alt.sources. En aquesta etapa del desenvolupament ja estaven present classes amb herència, maneig d'excepcions, funcions, i els tipus medulares: list, dict, str i així successivament. A més en aquest llançament inicial estava present un sistema de mòduls adoptat de Modula-3; van Rossum descriu el mòdul com "un de les majors unitats de programació de Python".[3] El model d'excepcions en Python és semblat al de Modula-3, amb l'addició d'una clàusula else[4] . En l'any 1994 es va formar comp.lang.python, el fòrum de discussió principal de Python, marcant una fita en el creixement del grup d'usuaris d'aquest llenguatge.

Python va aconseguir la versió 1.0 al gener de 1994. Un gran conjunt de característiques incloses en aquest llançament van ser les eines de la programació funcional: lambda, map, filter i redueix. Van Rossum va estipular que "Fa 12 anys enrere, Python va adquirir lambda, redueix(), filter() and map(), cortesia d'un hacker de Lisp que les estranyava i que va enviar pegats."[5] El donant va ser Amrit Prem; no es fa cap esment específic de qualsevol herència de Lisp en les notes de llançament.

L'última versió alliberada provinent de CWI va ser Python 1.2. En 1995, van Rossum va continuar el seu treball en Python en la Corporation for National Research Initiatives (CNRI) en Reston, Virginia on ell va llançar diverses versions del programari.

Durant l'estada de van Rossum en CNRI, va llançar la iniciativa Computer Programming for Everybody (CP4I), amb la finalitat de fer la programació més accessible a més gent, amb un nivell de 'alfabetización' bàsic en llenguatges de programació, similar a l'alfabetización bàsica en anglès i habilitats matemàtiques necessàries per molts treballadors. Python va tenir un rol central en això: a causa del seu focus en una sintaxis neta, ja era idoni, i les metes de CP4I presentaven similituds amb el seu predecessor, ABC. El projecte va ser patrocinat per DARPA.[6] A l'any 2007, el projecte CP4I està inactivo, i mentre Python intenti ser fàcil d'aprendre i no gaire arcano en el seu sintaxis i semàntica, aconseguint als no-programadores, no és una preocupació activa.[7]

En 2000, l'equip de desarrolladores principal de Python es va canviar a BeOpen.com per a formar l'equip BeOpen PythonLabs. CNRI va demanar que la versió 1.6 fos feta pública, continuant el desenvolupament de Fins al punt en què l'equip de desenvolupament va abandonar CNRI; el seu programa de llançament i el de la versió 2.0 tenien una significante quantitat de translapo.[8] 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 desarrolladores PythonLabs es van unir en Digital Creations.

Python 2.0 va prendre una característica major del llenguatge de programació funcional Haskell: list comprehensions. La sintaxis de Python per a aquesta construcció és molt similar a la d'Haskell, salvo 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 recolección d'escombraries capaç de recolectar cicles de referències.[8]

Posterior a aquest doble llançament, i després que van Rossum va deixar CNRI per a treballar amb desarrolladores de programari comercial, va quedar clar que l'opció d'usar Python amb programari disponible sota GPL és molt desitjable. La llicència usada llavors, la Python License, incloïa una clàusula estipulant que la llicència estava governada per l'estat de Virginia, que va fer que, sota l'òptica dels advocats de Free Programari Foundation (FSF), incompatible amb GNU GPL. CNRI i FSF es van relacionar per a canviar la llicència de programari lliure de Python que la fessin compatible amb GPL. Aquest any (2001), van Rossum va ser premiat amb FSF Award for the Advancement of Free Programari.

Python 1.6.1 és essencialment el mateix que Python 1.6, amb uns pocs arranjaments de bugs, i amb una nova llicència compatible amb GPL.[9]


Python 2.1 va ser un treball derivat de Python 1.6.1, com també de Python 2.0. La seva llicència va ser renombrada: Python Programari Foundation License. Tot el codi, documentació i especificacions afegides, des de la data del llançament de la versió alfa de Python 2.1, té com amo a Python Programari Foundation (PSF), una organització sense fins de lucre formada l'any 2001, modelada sobre la base de l'Apache Programari Foundation.[9] Inclòs en aquest llançament va ser una implementación del scoping més semblant a les regles de static scoping (del com Scheme és l'originador).[10]

Una innovació major en Python 2.2 va ser la unificación dels tipus en Python (tipus escrits en C), i classes (tipus escrits en Python) dintre d'una jerarquia. Aquesta unificación va assolir un model d'objectes de Python pur i consistent.[11] També van ser agregats els generadores que van ser inspirats pel llenguatge Icon.[12]

Les addicions a la biblioteca estàndard de Python i les decisions sintácticas van ser influenciadas fortament per Java en alguns casos: el package logging,[13] introduït en la versió 2.3,[14] el parser SAX, introduït en 2.0, i la sintaxis del patró decorator que usa el \@ ,[15] agregat en la versió 2.4[16]

A Febrer de 2008, l'última versió de producció de Python és la 2.5.2

[editar] Característiques i paradigmes

Python és un llenguatge de programació multiparadigma. Això significa que més que forçar als programadores a adoptar un estil particular de programació, permet diversos estils: programació orientada a objectes, programació estructurada i programació funcional. Molts altres paradigmes més estan suportats mitjançant l'ús d'extensions. Python usa tipus de dada dinàmica i reference counting per al maneig de memòria. Una característica important de Python és la resolució dinàmica de noms, el que enllaça un mètode i un nom de variable durant l'execució del programa (també cridat lligadura dinàmica de mètodes).

Un altre objectiu del disseny del llenguatge era la facilitat d'extensió. Nous mòduls es poden escriure fàcilment en C o C++. Python pot utilitzar-se com un llenguatge d'extensió per a mòduls i aplicacions que necessiten d'una interfaz programable. Encara que el disseny de Python és d'alguna manera hostil a la programació funcional tradicional del Lisp, existeixen bastants analogías entre Python i els llenguatges minimalistas de la família del Lisp com pot ser Scheme.

[editar] Filosofia

Els usuaris de Python es refereixen sovint a la Filosofia Python que és bastant análoga a la filosofia d'Unix . El codi que segueix els principis de Python de legibilidad i transparència es diu que és "pythonico". Contrariamente, el codi opac o ofuscado és batejat com "no pythonico" ("unpythonic" en anglès). Aquests principis van ser famosamente descrits pel desarrollador de Python Tim Peters en El Zen de Python

  1. Bell és millor que lleig.
  2. Explícit és millor que implícito.
  3. Simple és millor que complex.
  4. Complex és millor que complicat.
  5. Plànol és millor que anidado.
  6. Ralo és millor que dens.
  7. La legibilidad compte.
  8. Els casos especials no són tan especials com per a quebrantar les regles.
  9. Encara que el pràctic gana a la pureza.
  10. Els errors mai haurien de deixar-se passar silenciosamente.
  11. Llevat que hagin estat silenciats explícitament.
  12. Enfront de l'ambigüitat, rebutjar la temptació d'endevinar.
  13. Hauria d'haver-hi una -i preferiblement només una- manera òbvia de fer-ho.
  14. Encara que aquesta manera pot no ser òbvia al principi llevat que vostè sigui Holandès.[17]
  15. Ara és millor que mai.
  16. Encara que mai és sovint millor que ja.
  17. Si la implementación és dificil d'explicar, és una mala idea.
  18. Si la implementacion és fàcil d'explicar, pot que sigui una bona idea.
  19. Els espais de noms (namespaces) són una gran idea Fem més d'aquestes coses!

Des de la versió 2.1.2, Python inclou aquests punts (en la seva versió original en anglès) com un ou de pascua que es mostra a l'executar import this.

[editar] Manera interactiva

L'intèrpret de Python estàndard inclou una manera interactiva, en el qual s'escriuen les instruccions en una espècie de shell: les expressions poden ser introduïdes una per una, podent veure's el resultat de la seva avaluació immediatament. Això resulta útil tant per a les persones que s'estan familiarizando amb el llenguatge com també per als programadores més avançats: es poden provar porcions de codi en la manera interactiva abans d'integrar-ho com part d'un programa.

Existeixen altres programes, tals com ANEU-LI i IPython, que afegeixen funcionalitats extra a la manera interactiva, com l'acte-completar codi i el coloreado de la sintaxis del llenguatge.

Exemple de la manera interactiva:

>>> 1+1
2
>>> a = range(10)
>>> print a \[
0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[editar] Elements del llenguatge

Python va ser dissenyat per a ser llegit amb facilitat. Entre altres coses s'utilitzen paraules en anglès on altres llenguatges utilitzarien símbols (per exemple, els operadors lògics || i && en Python s'escriuen or i and, respectivament).

En comptes de delimitar els blocs de codi mitjançant l'ús de claus ({}), Python utilitza la indentación. Això fa que la mateixa sigui obligatòria, ajudant a la claredat i consistencia del codi escrit (fins i tot entre diversos desarrolladores):

Funció factorial en C Funció factorial en Python
int factorial(int x) 
{
 if (x == 0)
   return 1;
 else
   return x*factorial(x - 1); 
}
def factorial(x):
    if x == 0:
        return 1
    else:
        return x * factorial(x-1)

[editar] Comentaris

Els comentaris s'inicien amb el símbol #, i s'estenen fins al final de la línia.

[editar] Variables

Les variables s'escriuen de forma dinàmica. El signe igual (=) s'usa per a assignar valors a les variables:

x = 1
x = 'text' # això és possible perquè les variables són dinámicamente tipadas

[editar] Tipus de dades

Els tipus de dades es poden resumir en aquesta taula:

Tipus Classe Notes Exemple
str String Inmutable 'Wikipedia'
unicode String Versió Unicode de str o'Wikipedia'
list Seqüència Mutable, pot contenir diversos tipus [4.0, 'string', True]
tuple Seqüència Inmutable (4.0, 'string', True)
set Conjunt Mutable, sense ordre, no conté duplicats set([4.0, 'string', True])
frozenset Conjunt Inmutable, sense ordre, no conté duplicats frozenset([4.0, 'string', True])
dict Mapping Grup de parells claus, valor {'key1': 1.0, 'key2': False}
int Nombre sencer Precisió fixa 42
long Nombre sencer Precisió arbitraria 42L o 456966786151987643L
float Nombre Mengi flotant 3.1415927


[editar] Tuplas i Llistes

  • Per a declarar una llista, prou usar els corchetes([ ]), mentre que per a declarar una tupla s'han d'usar els parèntesis ().
  • Tant les llestes com les tuplas poden contenir elements de diferents tipus.
  • Per a accedir als elements d'una llista o tupla, s'utilitza un índex sencer. Es poden utilitzar índexs negatius per a accedir elements a partir del final de l'array.
  • Les llistes es caracteritzen per ser mutables, és a dir, es pot canviar el seu contingut, mentre que no és possible modificar el contingut d'una tupla ja creada, ja que és inmutable.
>>> llista = ['aaa', 1, 90]
>>> llesta[-1]
90
>>> llista[0] = 'aaa'
>>> llesta[0:2]
['aaa', 1]
 
>>> tupla = (1, 2, 3)
>>> tupla[0] = 2 
 ( genera un error )
>>> tupla[0]
1
>>> otratupla = (tupla, ('a', 'b')) # és possible anidar tuplas

[editar] Diccionaris

Els diccionaris es declaren entre claus ({}), la qual pot contenir parells de valors separats per dos punts (:).

En aquest exemple, es recorre l'estructura de diccionari, i s'imprimeix el seu contingut de la forma clau=valor

>>> dict = {"dia": 24, "mes": "agost"}
>>> for k in dict:
...    print("%s=%s" % (k, dict[k]))
 
dia=24
mes=agost

[editar] Conjunts (Sets)

Els conjunts es declaren mitjançant la instrucció set. Els conjunts no tenen ordre ni permeten tenir elements repetits.

>>> conj = set(['a','b','a'])
>>> print(conj)
set('a','b')

[editar] Funcions

Les funcions es defineixen amb la paraula clau def, seguida del nom de la funció i els seus paràmetres. Una altra forma de crear funcions, encara que més limitada, és amb la paraula clau lambda (que apareix en llenguatges funcionals com Lisp).

>>> f = lambda x: x+2
>>> f(4)
6

[editar] Sistema d'objectes

En Python, tot és un objecte (fins i tot les classes). Les classes, al ser objectes, són instàncies d'una metaclase. Python a més suporta herència múltiple i polimorfismo.

[editar] Biblioteca estàndard

Python viene con "baterías incluidas"
Python ve amb "bateries incloses"

Python té una gran llibreria estàndard, usada per a una diversitat de tasques. Això ve de la filosofia "bateries incloses" ("batteries included") per a mòduls de Python. Els mòduls de la biblioteca estàndard poden ser millorats per mòduls personalitzats escrits tant en C o en Python. A causa de la gran varietat d'eines incloses en la biblioteca estàndard combinada amb l'habilitat d'usar llenguatges de baix nivell com C i C++, els quals són capaces d'interactuar amb altres biblioteques, Python és un llenguatge que combina la seva clara sintaxis amb l'immens poder de llenguatges menys elegants.

[editar] Implementaciones

Python posseeix diverses implementaciones:

  • CPython és la implementación original, disponible per a diverses plataformes en el lloc oficial de Python.
  • IronPython és la implementación per a.NET
  • Stackless Python és la variant de CPython que tracta de no usar el stack de C (www.stackless.com)
  • Jython és la implementación feta en Java
  • Pippy és la implementación realitzada per a Palm (pippy.sourceforge.net)
  • PyPy és Python totalment escrit en Python (codespeak.net/pypy)

[editar] Llicències

Python posseeix una llicència de codi obert, denominada Python Programari Foundation License, que és compatible amb la llicència GPL. Aquesta llicència no obliga a alliberar el codi font al distribuir els arxius binarios.[18]

[editar] Exemples de codi Python

El següent exemple mostra com obtenir una llista amb els quadrats dels nombres del 0 al 9 (inclusivament).

print [x**2 for x in range(10)]

El següent exemple saludarà a l'usuari si es coneix el seu plat preferit, o li preguntarà quin és en cas contrari.

# -*- coding: iso8859-15 -*-
# diccionari de menjars preferits de cada persona
menjades = {
   "Juan" : "tauró en escabeche",
   "Pablo" : "paella don Beto", 
   "Alfredo" : "sesos de mico",
   "Fulano" : "cucarachas fregides",
   "Sonia" : "rucs",
   "Darinel" : "hamburguesas Mr Paul",
   "Jose" : "ceviche",
   "Cessar" : "arròs amb pollastre"
}
afirmatives = set(['si','s','molt','porfa'])
 
def saluda(nom, menjar):
    resposta = raw_input("Hola " + nom + ", t'agrada " + menjar + "? ")
    if resposta not in afirmatives:
        pregunta(nom)
 
def pregunta(nom):
    resposta = raw_input("Hola " + nom + ", quin menjar t'agrada? ")
    menjars[nom] = resposta
 
for nom in ["Juan", "Pablo", "Alfredo", "Fulano", "Sonia", "Darinel", "Mengano","Cessar"]:
    if nomeni in menjars and menjars[nom] is not None:
        saluda(nom, menjars[nom])
    else:
        pregunta(nom)

El següent exemple busca i explica paraules palíndromas (es llegeixen igual al dret i al revés) en un arxiu de text que li indiquem.

ruta = raw_input("Digite la ruta de l'arxiu a llegir: ")
arxiu = open(ruta, 'r')
text = arxivo.read()
 
explicar = 0
 
for paraula in text.split(' '):
  if paraula == paraula[::-1]:
    explicar += 1
 
if explicar == 0:
  print("No hi ha paraules palíndromas en l'arxiu")
else:
  print("Paraules palíndromas trobades: ", explicar)
 
arxiu.close()

[editar] Referències

[editar] Vegi's també

  • Django. Plataforma de desenvolupament web.
  • Plone. Gestor documental escrit i extensible en Python.

[editar] Mòduls

  • Pygame, conjunt de mòduls per a crear jocs 2D
  • RDFLib, biblioteca per a treballar amb RDF

[editar] Enllaços externs

[editar] Referències en castellà

Wikilibros

[editar] Referències en Anglès

[editar] Referències en Portuguès