Post on 18-Jul-2015
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.