Document Actions
Send this page to somebody Print this page
Parte 1

1. Plataformas e implementaciones


Sistemas operativos


Implementaciones


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):
    """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)
Ejecución:
$ 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):
    """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)
Ejemplo:
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 python
if __name__ = "__main__"
>>> import odbchelper
>>> odbchelper.__name__
'odbchelper'

11. Documentación

$ pydoc -p 10000

Ejercicios

  1. Hacer un programa que calcule factorial de un numero natural. Ver definición en wikipedia.
  2. Hacer un programa que convierta la temperatura de celcius a farenheit ( 9/5 + 32). Ver definición en wikipedia.
  3. Usando la función input, hacer que el usuario ingrese el valor a convertir
  4. Usando pydoc, investigar los atributos del módulo sys. Probar en Python los relacionados a path.
  5. Leer el pep08 [ingles][español] y compararlo con el zen de python. Para ver el zen de python correr:
    $ python
    >>> import this

Copyright (C) 2004-2007 Menttes - All Rights Reserved