+%% vim: set encoding=utf-8 :
+%include "common.mgp"
+%%
+%page
+%nodefault
+%center, size 7, font "standard", back "white", fore "black"
+
+Python Básico
+%size 4
+
+El lenguaje de la viborita
+
+%bar "gray" 5 10 80
+
+Leandro Lucarella (llucare@fi.uba.ar)
+
+LUGFI - UBA
+
+7 de octubre de 2006
+
+
+%page
+
+Reseña histórica
+
+ Creado en 1990 por Guido van Rossum (BDFL)
+ Nombrado en honor a los (únicos e inigualables) Monty Python
+ En 2000 aparece Python 2.0
+ En 2001 aparece Python 2.1 y la PSF, nueva "dueña" de Python.
+ Versión actual: 2.5 (recién salido del horno)
+ Futuro/Evolución -> PEPs -> Python 3000 (ver PEP)
+ Implementaciones: CPython, Jython, IronPython, PyPy, Nokia (S60)
+ Hablamos de CPython que es la principal (disponible en más de 35 plataformas)
+
+%page
+
+Características principales
+
+ Dinámico
+ Compila a bytecode (on the fly)
+ Interpretado, por VM
+ Fácilmente extensible usando módulos en C
+ Manejo de memoria automático (GC con detección de ciclos)
+ Core reducido y después syntactic sugar
+ Intérprete interactivo
+ Biblioteca estándar extensa y muchas (MUCHAS) extensiones
+ Números de precisión arbitraria
+ Concurrencia real (palo para Ruby =P)
+ Multiparadigma: OO, estructurado, funcional, genérica, metaprogramación, aspectos
+ Influenció otros lenguajes, como RUBY!!! y Boo (.NET)
+
+%page
+
+The Zen of Python (import this)
+
+ Beautiful is better than ugly.
+ Explicit is better than implicit.
+ Simple is better than complex.
+ Complex is better than complicated.
+ Flat is better than nested.
+ Sparse is better than dense.
+ Readability counts.
+ Special cases aren't special enough to break the rules.
+ Although practicality beats purity.
+
+%page
+
+The Zen of Python (continuación)
+
+ Errors should never pass silently.
+ Unless explicitly silenced.
+ In the face of ambiguity, refuse the temptation to guess.
+ There should be one-- and preferably only one --obvious way to do it.
+ Although that way may not be obvious at first unless you're Dutch.
+ Now is better than never.
+ Although never is often better than *right* now.
+ If the implementation is hard to explain, it's a bad idea.
+ If the implementation is easy to explain, it may be a good idea.
+ Namespaces are one honking great idea -- let's do more of those!
+
+%page
+
+Tipos
+
+ Tipado dinámico pero fuerte, duck typing
+ Todo es referencia (id), todo es un objeto (TODO)
+ Las clases son instancias de la clase type (que es instancia de sí mismo)
+ Los objetos son una identidad con un diccionario de atributos
+ Por lo tanto puedo modificar una clase dinámicamente
+ Las funciones son "ciudadanos de 1er orden"
+ Las funciones son objetos "callables" (que pueden ser atributos)
+ Los métodos son funciones atributo de una clase que toman el primer parámetro implícito
+ obj.metodo(a) es sintatic sugar de Clase.metodo(obj, a)
+
+%page
+
+Más sobre tipos
+
+ Mutabilidad
+ Secuencias
+ Built-in
+ CLASE MUTABILIDAD EJEMPLO
+ bool -> Inmutable -> a_int = True
+ int -> Inmutable -> a_int = 42
+ long -> Inmutable -> a_long = 12345678901234567890
+ float -> Inmutable -> a_float = 42.25
+ complex -> Inmutable -> a_complex = 42 + 25j
+ str -> Immutable -> a_str = 'Wikipedia'
+ unicode -> Inmutable -> a_unicode = u'Wikipedia'
+ list -> Mutable -> a_list = [4.0, 'string', True]
+ tuple -> Immutable -> a_tuple = (4.0, 'string', True)
+ set -> Mutable -> a_set = set([4.0, 'string', True])
+ dict -> Mutable -> a_dict = { 'key1' : 1.0, 'key2' : False }
+
+%page
+
+Sintaxis
+
+ Hola Mundo!
+ # coding: utf8
+ # (más formas de especificar, compatible con VIM/Emacs)
+ # Comentario
+ print "Hola mundo!"
+ Estructuras de control
+ if i < 10:
+ print "%d es chico" % i
+ elif i > 20:
+ print i, "es grande"
+ else:
+ Error de sintaxis
+ Bloques con identación??? (puaj? NO! Groso!)
+
+%page
+
+Sintaxis (continuación)
+
+ Más estructuras de control
+ while (no hay do-while, pero hay PEP!)
+ while i < 10:
+ print i
+ i += 1
+ for (sobre secuencias o "iterables")
+ l = [1, 2, 3, "hola", "chau"]
+ for item in l:
+ print item
+ for i in xrange(10):
+ print i
+
+%page
+
+Sintaxis
+
+ Funciones
+ def (para definir funciones)
+ def foo(a, b, *args, **kargs):
+ print a, b
+ for arg in args:
+ print arg
+ for (key, val) in kargs.iteritems():
+ print key, '=', val
+ if a == b:
+ return True
+ else:
+ return False
+
+%page
+
+Sintaxis
+
+ Clases
+ class A1: pass
+ class A2: pass
+ class B(A1, A2):
+ atributo_de_clase = 1
+ def __init__(self, parametro1, *args)
+ self.attr1 = parametro1
+ self.lista = args
+ if atributo_de_clase == 1:
+ def hola(self):
+ print 1
+ else:
+ def hola(self)
+ print 2
+ class C:
+ pass
+
+%page
+
+Sintaxis
+
+ Instanciación
+ a = A()
+ b = B(1)
+ c = B.C()
+ c.otro_atributo = lambda x, y: x + y
+ Private? Protected? Lo qué???
+
+%page
+
+Sintaxis - Excepciones
+
+ try-except
+ try:
+ for linea in file("algo.txt"):
+ print linea
+ except Exception, e:
+ print e
+ else:
+ print "Todo OK"
+ try-finally
+ try:
+ for linea in file("algo.txt"):
+ print linea
+ finally:
+ print "Listo!"
+ try-except-finally (PEP, en 2.5?)
+
+%page
+
+Sintaxis
+
+ Módulos (built-in)
+ import modulo
+ import modulo as mod
+ from modulo import Clase
+ from modulo import *
+ from modulo import Clase as C
+ Hay más, pero no hay tiempo (seguro ya estoy excedido con la hora)
+
+%page
+
+Preguntas?
+
+ Para los que todavía no se fueron a comer...
+