Parte 1
1. Plataformas e implementaciones
Sistemas operativos
- Windows: Active Python, python.org
- MacOS
- Linux: RedHat, Debian, tar.gz
Implementaciones
- Jython
- IronPython (.net/mono)
- CPython
- PyPy Experimental
Shell Interactivo
$ python
>>> 1 + 1
2
>>> print 'hello world'
hello world
>>> x = 1
>>> y = 2
>>> x + y
3
2. Primer programa en Python
def buildConnectionString(params):Ejecución:
"""Build a connection string from a dictionary
Returns string.
"""
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret"
}
print buildConnectionString(myParams)
$ python odbchelper.py
pwd=secret;database=master;uid=sa;server=mpilgrim
3. Funciones
- Python no posee archivos header como en C++ o interface/implements como en Pascal
- Cuando necesitas una función, solo la tenes que declarar como en el ejemplo:
def buildConnectionString(params):
- En la declaración no se especifica el valor de retorno (de hecho siempre devuelven un valor)
- Visual Basic: existen function / sub - en python todo es una función
- params no especifica el tipo de datos, lo infiere python. De hecho las variables nunca son tipadas explicitamente.
- En C++ / Java y otros lenguajes con tipado-estático se debe especificar el tipo de los parametros y retorno. En Python no, basandose en el valor que se asigna, Python sabe internamente cual es su tipo.
4. Tipos de datos de Python vs otros Lenguajes
- Lenguajes tipados estáticamente (Java, C)
- Lenguajes tipados dinámicamente (VBScript, Python, Smalltalk)
- Lenguajes de tipado fuerte (Java, Python)
- Lenguaje de tipado debil (VBScript)
5. Documentación de funciones
def buildConnectionString(params):
"""Build a connection string from a dictionary
Returns string.
"""
- Comillas triples significa string multilínea (qq/..../ en Perl)
- Muchos IDEs de python lo usan para proveer ayuda contextual
>>> import odbchelper
>>> odbchelper.buildConnectionString.__doc__
'Build a connection string from a dictionary\n\t\n\tReturns string.\n\t'
Mas sobre documentación de funciones:
6. Todo es un objeto
>>> import odbchelper
>>> params = {"server":"myserver", "datatabase":"master","uid":"sa","pwd":"secret" }
>>> print odbchelper.buildConnectionString(params)
server:myserver;datatabase:master;uid:sa;pwd:secret
>>> odbchelper.buildConnectionString.__doc__
'Build a connection string from a dictionary\n\t\n\tReturns string.\n\t'
7. Path de Import
>>> import sys
>>> sys.path
['', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/workingenv.py-0.6.5-py2.5.egg',
'/usr/lib/python2.5/site-packages/archgenxml-2.0_beta8-py2.5.egg', '/usr/lib/python25.zip', '/usr/lib/python2.5',
'/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload',
'/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/Numeric',
'/usr/lib/python2.5/site-packages/PIL', '/var/lib/python-support/python2.5', '/usr/lib/python2.5/site-packages/gtk-2.0',
'/var/lib/python-support/python2.5/gtk-2.0', '/usr/lib/python2.5/site-packages/wx-2.6-gtk2-unicode']
>>> sys.path.append('/home')
>>> sys.path
['', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/workingenv.py-0.6.5-py2.5.egg',
'/usr/lib/python2.5/site-packages/archgenxml-2.0_beta8-py2.5.egg', '/usr/lib/python25.zip', '/usr/lib/python2.5',
'/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload',
'/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/Numeric',
'/usr/lib/python2.5/site-packages/PIL', '/var/lib/python-support/python2.5', '/usr/lib/python2.5/site-packages/gtk-2.0',
'/var/lib/python-support/python2.5/gtk-2.0', '/usr/lib/python2.5/site-packages/wx-2.6-gtk2-unicode', '/home']
>>>
8. Qué es un objeto
- Otros lenguajes: todos los objetos tienen atributos y métodos - todos los objetos pueden tener subclases
- Python: algunos objetos no tienen atributos ni métodos y no todos pueden tener subclases. En python todo es un objeto en el sentido que puede ser asignado a variables o pasado como argumentos en una función.
>>> import odbchelper
>>> odbchelper.buildConnectionString
<function buildConnectionString at 0x8336dbc>
>>> mi_funcion = odbchelper.buildConnectionString
>>> params = {"server":"myserver", "datatabase":"master","uid":"sa","pwd":"secret" }
>>> mi_funcion(params)
9. Indentación de código
Python no usa begin ni end, tampoco {}def buildConnectionString(params):Ejemplo:
"""Build a connection string from a dictionary
Returns string.
"""
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret"
}
print buildConnectionString(myParams)
def fib(n):
print 'n =', n
if n > 1:
return n * fib(n-1)
else:
print 'end of line'
return 1
Mas sobre indentación
10. Probando Módulos
Sobre el if en pythonif __name__ = "__main__"
>>> import odbchelper
>>> odbchelper.__name__
'odbchelper'
11. Documentación
$ pydoc -p 10000
Ejercicios
- Hacer un programa que calcule factorial de un numero natural. Ver definición en wikipedia.
- Hacer un programa que convierta la temperatura de celcius a farenheit ( 9/5 + 32). Ver definición en wikipedia.
- Usando la función input, hacer que el usuario ingrese el valor a convertir
- Usando pydoc, investigar los atributos del módulo sys. Probar en Python los relacionados a path.
- Leer el pep08 [ingles][español] y compararlo con el zen de python. Para ver el zen de python correr:
$ python
>>> import this