Trabajo de python

19
UNIVERSIDAD DE ORIENTE NÚCLEO DE ANZOÁTEGUI ESCUELA DE INGENIERÍA Y CIENCIAS APLICADAS DEPARTAMENTO DE ELECTRICIDAD Profesor: Navarro, Danilo Bachiller: González, Edgar C.I: 20.903.274 Sección: 03 Barcelona, 25 de marzo de 2011

Transcript of Trabajo de python

UNIVERSIDAD DE ORIENTE

NÚCLEO DE ANZOÁTEGUI

ESCUELA DE INGENIERÍA Y CIENCIAS APLICADAS

DEPARTAMENTO DE ELECTRICIDAD

Profesor: Navarro, Danilo Bachiller:

González, Edgar C.I: 20.903.274

Sección: 03

Barcelona, 25 de marzo de 2011

1. ¿Qué Es Python?

Es un lenguaje de programación de alto nivel cuya filosofía hace hincapié en una

sintaxis muy limpia y que favorezca un código legible.

Se trata de un lenguaje de programación multiparadigma ya que soporta orientación

a objetos, programación imperativa y, en menor medida, programación funcional.

Es un lenguaje interpretado, usa tipado dinámico, es fuertemente tipado y es

multiplataforma.

Es administrado por la Python Software Foundation. Posee una licencia de código

abierto, denominada Python Software Foundation License, que es compatible con

la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas

versiones anteriores.

2. Historia de python.

Python fue creado a finales de los ochenta por Guido van Rossum en el National

Research Institute for Mathematics and Computer Science (CWI), en los Países Bajos,

como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones e

interactuar con el sistema operativo Amoeba.

El nombre del lenguaje proviene de la afición de su creador original, Guido van

Rossum, por los humoristas británicos Monty Python.

Van Rossum es el principal autor de Python, y su continuo rol central en decidir la

dirección de Python es reconocido, refiriéndose a él como Benevolente Dictador

Vitalicio (en inglés: Benevolent Dictator for Life, BDFL).

En 1991, van Rossum publicó el código de la versión 0.9.0 en alt.sources. En esta

etapa del desarrollo ya estaban presentes clases con herencia, manejo de

excepciones, funciones y los tipos modulares, como: str, list, dict, entre otros. Además en

este lanzamiento inicial aparecía un sistema de módulos adoptado de Modula-3; van

Rossum describe el módulo como “una de las mayores unidades de programación de

Python”. El modelo de excepciones en Python es parecido al de Modula-3, con la adición

de una cláusula else. En el año 1994 se formó comp.lang.python, el foro de discusión

principal de Python, marcando un hito en el crecimiento del grupo de usuarios de este

lenguaje.

Python alcanzó la versión 1.0 en enero de 1994.

Una característica de este lanzamiento fueron las herramientas de la programación

funcional: lambda,reduce, filter y map. Van Rossum explicó que “hace 12 años, Python

adquirió lambda, reduce (), filter() y map(), cortesía de un hacker de Lisp que las extrañaba

y que envió parches”.

El donante fue Amrit Prem; no se hace ninguna mención específica de cualquier

herencia de Lisp en las notas de lanzamiento.

La última versión liberada proveniente de CWI fue Python 1.2. En 1995, van Rossum

continuó su trabajo en Python en la Corporation for National Research Initiatives (CNRI)

en Reston,Virginia, donde lanzó varias versiones del software.

Durante su estancia en CNRI, van Rossum lanzó la iniciativa Computer Programming

for Everybody (CP4E), con el fin de hacer la programación más accesible a más gente, con

un nivel de alfabetización básico en lenguajes de programación, similar a la alfabetización

básica en inglés y habilidades matemáticas necesarias por muchos trabajadores. Python

tuvo un papel crucial en este proceso: debido a su orientación hacia una sintaxis limpia, ya

era idóneo, y las metas de CP4E presentaban similitudes con su predecesor, ABC. El

proyecto fue patrocinado por DARPA. En el año 2007, el proyecto CP4E está inactivo, y

mientras Python intenta ser fácil de aprender y no muy arcano en su sintaxis y semántica,

alcanzando a los no-programadores, no es una preocupación activa.

En el año 2000, el equipo principal de desarrolladores de Python se cambió

a BeOpen.com para formar el equipo BeOpen PythonLabs. CNRI pidió que la versión 1.6

fuera pública, continuando su desarrollo hasta que el equipo de desarrollo abandonó

CNRI; su programa de lanzamiento y el de la versión 2.0 tenían una significativa cantidad

de traslapo. Python 2.0 fue el primer y único lanzamiento de BeOpen.com. Después que

Python 2.0 fuera publicado por BeOpen.com, Guido van Rossum y los otros

desarrolladores de PythonLabs se unieron en Digital Creations.

Python 2.0 tomó una característica mayor del lenguaje de programación

funcional Haskell: listas por comprensión. La sintaxis de Python para esta construcción es

muy similar a la de Haskell, salvo por la preferencia de los caracteres de puntuación en

Haskell, y la preferencia de Python por palabras claves alfabéticas. Python 2.0 introdujo

además un sistema de recolección capaz de recolectar referencias cíclicas.

Posterior a este doble lanzamiento, y después que van Rossum dejó CNRI para

trabajar con desarrolladores de software comercial, quedó claro que la opción de usar

Python con software disponible bajo GNU GPL era muy deseable. La licencia usada

entonces, la Python License, incluía una cláusula estipulando que la licencia estaba

gobernada por el estado deVirginia, por lo que, bajo la óptica de los abogados de Free

Software Foundation (FSF), se hacía incompatible con GPL. CNRI y FSF se relacionaron para

cambiar la licencia de software libre de Python para hacerla compatible con GPL. En el año

2001, van Rossum fue premiado con FSF Award for the Advancement of Free Software.

Python 1.6.1 es esencialmente el mismo que Python 1.6, con unos pocos arreglos

de bugs, y con una nueva licencia compatible con GPL.

3. De Donde Viene El Nombre Python.

El creador del lenguaje es un europeo llamado Guido Van Rossum. Hace ya más de

una década que diseño Python, ayudado y motivado por su experiencia en la creación de

otro lenguaje llamado ABC. El objetivo de Guido era cubrir la necesidad de un lenguaje

orientado a objetos de sencillo uso que sirviese para tratar diversas tareas dentro de la

programación que habitualmente se hacía en Unix usando C.

El desarrollo de Python duró varios años, durante los que trabajó en diversas

compañías de Estados Unidos. En el 2000 ya disponía de un producto bastante completo y

un equipo de desarrollo con el que se había asociado incluso en proyectos empresariales.

Actualmente trabaja en Zope, una plataforma de gestión de contenidos y servidor de

aplicaciones para el web, por supuesto, programada por completo en Python.

4. Características Del Lenguaje De Python.

Propósito general

Se pueden crear todo tipo de programas. No es un lenguaje creado específicamente

para la web, aunque entre sus posibilidades sí se encuentra el desarrollo de páginas.

Multiplataforma

Hay versiones disponibles de Python en muchos sistemas informáticos distintos.

Originalmente se desarrolló para Unix, aunque cualquier sistema es compatible con el

lenguaje siempre y cuando exista un intérprete programado para él.

Interpretado

Quiere decir que no se debe compilar el código antes de su ejecución. En realidad sí

que se realiza una compilación, pero esta se realiza de manera transparente para el

programador. En ciertos casos, cuando se ejecuta por primera vez un código, se producen

unos (bytecodes) que se guardan en el sistema y que sirven para acelerar la compilación

implícita que realiza el intérprete cada vez que se ejecuta el mismo código.

Interactivo

Python dispone de un intérprete por línea de comandos en el que se pueden

introducir sentencias. Cada sentencia se ejecuta y produce un resultado visible, que puede

ayudarnos a entender mejor el lenguaje y probar los resultados de la ejecución de

porciones de código rápidamente.

Orientado a Objetos

La programación orientada a objetos está soportada en Python y ofrece en muchos

casos una manera sencilla de crear programas con componentes reutilizables.

Funciones y librerías

Dispone de muchas funciones incorporadas en el propio lenguaje, para el

tratamiento de strings, números, archivos, etc. Además, existen muchas librerías que

podemos importar en los programas para tratar temas específicos como la programación

de ventanas o sistemas en red o cosas tan interesantes como crear archivos comprimidos

en .zip.

Sintaxis clara

Por último, destacar que Python tiene una sintaxis muy visual, gracias a una notación

identidad (con márgenes) de obligado cumplimiento. En muchos lenguajes, para separar

porciones de código, se utilizan elementos como las llaves o las palabras clave (begin y

end). Para separar las porciones de código en Python se debe tabular hacia dentro,

colocando un margen al código que iría dentro de una función o un bucle. Esto ayuda a

que todos los programadores adopten unas mismas notaciones y que los programas de

cualquier persona tengan un aspecto muy similar.

5. Filosofía Del Python

Los usuarios de Python se refieren a menudo a la Filosofía Python que es bastante

análoga a la filosofía de Unix. El código que sigue los principios de Python de legibilidad y

transparencia se dice que es "pythonico". Contrariamente, el código opaco u ofuscado es

bautizado como "no pythonico" ("unpythonic" en inglés). Estos principios fueron

famosamente descritos por el desarrollador de Python Tim Peters en El Zen de Python

Bello es mejor que feo.

Explícito es mejor que implícito.

Simple es mejor que complejo.

Complejo es mejor que complicado.

Plano es mejor que anidado.

Disperso es mejor que denso.

La legibilidad cuenta.

Los casos especiales no son tan especiales como para quebrantar las reglas.

Aunque lo práctico gana a la pureza.

Los errores nunca deberían dejarse pasar silenciosamente.

A menos que hayan sido silenciados explícitamente.

Frente a la ambigüedad, rechaza la tentación de adivinar.

Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.

Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.

Ahora es mejor que nunca.

Aunque nunca es a menudo mejor que ya mismo.

Si la implementación es difícil de explicar, es una mala idea.

Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

Líneas lógicas y físicas

Línea lógica: una o más líneas físicas, siguiendo las reglas de juntar líneas.

Explícita '\' al final del renglón.

Implícita (, [, y { pueden continuarse en siguiente línea física.

Varias instrucciones en el mismo renglón: separadas con ;.

Objetos básicos

Todo dato en python, incluso el código mismo, es un objeto. Los objetos tienen:

identidad dirección en memoria, no cambia id()

tipo define qué operaciones y valores puede tomar type()

valor mutable, inmutable

Algunos objetos son contenedores, es decir, tiene referencias a otros objetos.

Los tipos básicos son:

Números. Valor único inmutable Secuencias. Contenedor. Conjunto ordenado, índices son números naturales.

Mutables e inmutables. Mapeos. Contenedor. Conjunto sin orden, índices pueden ser un conjunto

arbitrario excepto listas o diccionarios. Mutable. Objetos llamables. Funciones internas o definidas por el usuario, métodos,

módulos internos o definidos por el usuario, clases, instancias de una clase, archivos.

Números inmutables enteros sencillos

-2,147,483,648 a 2,147,483,647 OverflowError

enteros largos sin límite

punto flotante doble precisión

complejos pareja de números de punto

flotante z.real, z.imag

Secuencias

inmutables cadenas '' 'a' ``hola`` ``````hola ``````&

tuples ( ), (1,), (1,2)

mutables listas [ ], [1], [1,2,3]

Mapeos mutables diccionarios { },{a:123, b:456}

dbm, gdbm

Método: función que pertenece a un objeto.

Valores lógicos

Falso Valor cero, contenedor vacío, None

Verdadero Todo lo demás, Ellipsis.

Funciones

cmp( x, y ) 0 si x=y, 1 si x>y, -1 si x<y

Números

Enteros decimal 234890

octal 0766

hexadecimal 0x0fee

Enteros largos 1L

Punto flotante 1.5, 1e100

Complejos ( 5, 7j )

Funciones

int( x, [base] ) str o int -> int trunca

long( x ) str o int -> long

float( x ) str o int -> float

hex( i ) int -> str

oct( x ) int -> str

round( x, n) float -> float, n=0

trunc( x ) xxx -> xxx

abs( x ) valor absoluto

Secuencias

inmutables cadenas '' 'a' 'ab'

tuplas () (1,) (1,2)

mutables listas [] [0] [0,1]

Elementos

nombre[0] primer elemento

nombre[1] segundo elemento

nombre[-1] último elemento

nombre[-2] penúltimo elemento

Índice fuera de rango es un error.

Secciones

Nombre [índice inferior: índice superior]

Longitud del corte = índice superior - índice inferior

nombre[:fin] Primer índice omitido vale 0.

nombre[inicio:] Segundo índice omitido vale tamaño del objeto.

nombre[:] Copia del objeto.

nombre[0:1] Primer elemento.

nombre[0:2] Primero y segundo elementos

nombre[-2:] Últimos dos elementos

Índices fuera de rango se aceptan: topan con 0 y el tamaño del objeto

Nombre[:i] + nombre[i:] es igual a nombre.

Funciones

max(s Mayor elementos de s

min( s ) Menor elementos de s

len( s ) Cantidad de elementos

Operadores

+ Concatenación.

* Multiplicación.

'aaa' 'bbb' Concatenación implícita.

> < == Comparaciones - lexicográficamente.

e[not] in s Membresía

Programación funcional

range( [inicio,] fin [, incremento] ) inicio=0, incremento=1[0, 1, ... incremento < fin]

inicio+i*incremento < fin

[inicio, inicio+i*incremento, ...]

xrange() ídem, para rangos muy grandes

filter( función, secuencia ) if función( elemento ): tomar elemento

map( función, secuencia [,secuencia...] ) función( elemento [, elemento...] )

reduce( función, secuencia ) función( elemento0, elemento1), etc.

zip( secuencia [,secuencia...] ) Lista de tuplas con elemento i de cada secuencia)

Cadenas

''& Cadena vacía

'c' Caracter

'abc' Comillas sencillas

``abc``& Comillas dobles

'dice ``hola``' Comillas dobles dentro de

sencillas

``buyer's guide``& Comilla sencilla dentro de dobles

'``buyer\'s`` guide' Comilla con escape

``````hola``````& Pueden contener varios renglones y

comillas.

'''hola''' ídem

Métodos

capitalize() Iniciales con mayúsculas

s.join( secuencia ) Concatena secuencia con la cadena s

lower() Minúsculas

lstrip() Quita espacio en blanco al inicio

rstrip() Quita espacio en blanco al final

splitlines( [keepends]) Lista de renglones

strip() Quita espacio en blanco

upper() Mayúsculas

Caracteres

Son cadenas de longitud 1, no hay tipo char.

ord( c ) código ascii del caracter

chr( i ) caracter correspondiente

str( o ) cadena para imprimir representación del objeto

repr( o ) ídem, para usarse en eval()

Caracteres especiales

Secuencia de escape Significado

\\ \

\' '

\¨ ``

\f formfeed

\n linfeed

\r carriage return

\t tab

\ooo caracter ascii ooo octal

Tuplas

tuple( secuencia ) tupla con los elementos de la secuencia

Listas

Métodos

append(x) Agrega un elemento. Equivale a a[len(a):] = [x]

extend(L) Extiende la lista agregando los elementos de la lista. Equivale a[len(a):] = L

insert( i, x) Inserta un elemento en la posición dada.

insert( 0, x) Inserta al principio

remove(x) Elimina el primer elemento cuyo valor es x. Error si no existe

pop([i]) Elimina el elemento en la posición dada, y regresa su valor.

Sin parámetro es el último elemento.

index(x) Regresa el índice del primer elemento con valor x. Error si no existe

count(x) Regresa el número de veces que x aparece en la lista.

sort([cmpfunc]) Ordena los elementos, sobre la lista misma.

cmpfunc( x y, ) regresa 1 si x>y, 0 si x==y, -1 si x<y. cmp(x, y)

reverse() Ordena los elementos al revés, sobre la lista misma.

Funciones y operadores

del a[n] Borra elemento

del[ x:y] Borra sección

list( secuencia ) Lista con elementos de la secuencia

Usos

Pila LIFO append(x), pop()

Cola FIFO append(x), pop(0)

Matriz L[r][c]

Lista recursiva L.append(L)

Diccionarios

Operaciones y métodos

len(a) Cantidad de elementos en a

a[k] Elemento de a cuya llave es k (subscripción)

a[k] = x Asignar valor x a a[k]

del a[k] Eliminar a[k] de a

a.clear() Eliminar todos los elementos de a

a.copy() Una copia de a

a.has_key(k) 1 si a tiene llave k, 0 de lo contrario

a.items() Una copia de la lista de parejas (llave, valor) de a

a.keys() Una copia de la lista de llaves de a

a.update(b) for k, v in b.items(): a[k] = v

a.values() Una copia de la lista de valores de a

a.get(k[, x]) a[k] si a.has_key(k), x de lo contrario

Código

eval( expresión ) Evalúa expresión

exec( comando) Ejecuta instruccion(es)

Asignaciones

Nombre = expresión

a,b = c,d (pack, unpack)

Las asignaciones no copian datos, ligan nombres a objetos. Siempre van al ámbito interno.

Operadores

máxima prioridad

llamada a función f(argumentos)

sección x[índice:índice]

subscripción x[índice]

referencia a un atributo x.atributo

unitarios + -

potencia **

aritméticos * / %

+ -

desplazar bits » «

a nivel bits #1713#>

xor

| or

comparaciones < > == >= <= <> != Se pueden encadenar: x < y < z

identidad is [not]

membresía [not] in

booleanos not x

and

or

lambda expresión lambda

Control de flujo

if expresión:

Instrucción(es)

[elif:

Instrucción(es)]

[else:

Instrucción(es)]

while expresión:

Instrucción(es)

[else:

Instrucción(es)]

for elemento in lista:

Instrucción(es)

Entrada y Salida Consola

print Renglón en blanco

print x,y,z Separados por un espacio

print alfa, Evita línea nueva al final

print 'cadena-de-formato' % (expresiones) '%10s, %5d' como en printf()

print 'cadena-de-formato' % diccionario '%(llave)formato'

rawinput( [mensaje] ) Entrada de datos. Import readline opcional.

Columnas

import string

print string.ljust( expr, ancho), string.center( expr, ancho), string.rjust( expr,

ancho)

Archivos

f=open( 'ruta-a-archivo' [, modo]) modo: 'r', 'w', 'a', 'rb', 'wb', 'ab'

f.read( [bytes] ) bytes=todos

f.readline( [bytes] ) '\n' incluído al final de la cadena.

eof es cuando regresa cadena vacía.

f.readlines( [bytesaprox] ) bytesaprox=todos

f.write( expresión )

f.writelines( lista )

f.tell()

f.seek( offset, respectoa) 0 principio, 1 posición actual, 2 fin del archivo.

f.close()

Predefinidos: sys.stdin sys.stdout sys.stderr

Objetos persistentes

import pickle

pickle.dump( objeto, archivo)

objeto = pickle.load( archivo)

Parámetros

Posicionales nombre, ...

Con valor por omisión nombre=valor_por_omisión, ...

Opcionales *nombre

Uso

Nombre ( [argumentos] )

Argumentos

Posicionales valor, ...

Con nombre nombre=valor, ...

Por tupla *tupla

Por diccionario *diccionario

Orden: de arriba a abajo.

Los argumentos pasan por referencia al objeto.

Funciones lambda

lambda parámetros: expresión. Solamente una instrucción.

Documentación

Empieza con mayúscula, termina con punto, no incluye el nombre del objeto. Segunda línea vacía si tiene más líneas.

Ámbitos y espacios de nombres

Espacio de nombres: mapeo de nombres a objetos. Implementado con diccionarios.

Alias: varios nombres pueden apuntar a un mismo objeto.

Ámbito: región de texto de un programa de python donde un nombre es accesible directamente (con referencia sin calificar). Determinados estáticamente, usados dinámicamente.

Conclusión

Python está en movimiento y en pleno desarrollo, pero ya es una realidad y una

interesante opción para realizar todo tipo de programas que se ejecuten en cualquier

máquina. El equipo de desarrollo está trabajando de manera cada vez más organizada y

cuentan con el apoyo de una comunidad que está creciendo rápidamente.