From: Leandro Lucarella Date: Thu, 26 Oct 2006 03:04:10 +0000 (+0000) Subject: Charla de Python básica para el Día De Lenguajes. X-Git-Tag: svn_import~7 X-Git-Url: https://git.llucax.com/personal/documentos.git/commitdiff_plain/26ae4b410b35eefdd8d8b931397918075bf183f0?ds=sidebyside Charla de Python básica para el Día De Lenguajes. --- diff --git a/charla_ddl_python/common.mgp b/charla_ddl_python/common.mgp new file mode 100644 index 0000000..2ab81d6 --- /dev/null +++ b/charla_ddl_python/common.mgp @@ -0,0 +1,25 @@ +%% +%% Seteos comunes basados en el default +%% +%%deffont "standard" xfont "serif" "iso10646" +%%deffont "thick" xfont "sans-serif" "iso10646" +%%deffont "typewriter" xfont "monospace" "iso10646" +%%deffont "standard" xfont "Vera.ttf" +%%deffont "thick" xfont "VeraBd.ttf" +%%deffont "typewriter" xfont "VeraMono.ttf" +%deffont "standard" xfont "Bitstream Vera" +%deffont "thick" xfont "Bitstream Vera:Bold" +%deffont "typewriter" xfont "Bitstream Vera Mono" +%% +%default 1 area 90 90, leftfill, size 1, fore "black", back "white", font "thick" +%default 2 size 7, vgap 10, prefix " " +%default 3 size 2, bar "gray70", vgap 10 +%default 4 size 4, vgap 30, prefix " ", font "standard" +%% +%tab 1 size 4, vgap 40, prefix " ", icon box "black" 50 +%tab 2 size 3, vgap 40, prefix " ", icon arc "black" 50 +%tab 3 size 2, vgap 40, prefix " ", icon delta3 "black" 40 +%% +%% Que cachee la pagina que sigue, sin efectos +%default 1 pcache 1 1 0 1 +%% diff --git a/charla_ddl_python/presentacion.mgp b/charla_ddl_python/presentacion.mgp new file mode 100644 index 0000000..25a1d74 --- /dev/null +++ b/charla_ddl_python/presentacion.mgp @@ -0,0 +1,235 @@ +%% 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... +