Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a las artes marciales con Python

Introducción a las artes marciales con Python

Charla ofrecida en el marco de las JOINCIC2013

Israel Fermín Montilla

June 01, 2013
Tweet

More Decks by Israel Fermín Montilla

Other Decks in Programming

Transcript

  1. >>> from iferminm import info >>> print info [email protected] {

    'nombre': 'Israel Fermín Montilla', 'ocupación': 'programador', 'qué_hace_ahora': 'Lead Developer @ RingTu', 'blog': 'http://iferminmontilla.com', 'twitter': '@iferminm', 'organizaciones': ['PyVE', 'OpenVE'], }
  2. Lenguaje de alto nivel Orientado a objetos Fuertemente tipificado Tipos

    dinámicos DESDE EL CORE Estándar Autodocum entado Fácil introspección de objetos Scripting Programación Funcional Escrito en C
  3. ¿Por qué Python? • Autodocumentado • help() • Fácil introspección

    • dir(), setattr(), hasattr(), callable() • Obliga al orden • La identación importa • Sintaxis clara legible y concisa
  4. ¿Por qué Python? • C #include <stdio.h> #include <stdlib.h> int

    main() { printf('hola mundo'); return EXIT_SUCCESS; } • Java package com.holamundo public class HolaMundo { public static void main(String args[]) { System.out.println(“Hola Mundo”); } }
  5. Operadores estándar • Matemáticos – Iguales que en otros lenguajes

    • Menos la potencia que es ** • Lógicos: – && => and – || => or – == => == – != => != ó <> – ! => not
  6. Sintaxis sencilla • Declaración: – a = valor • Condiciones:

    – if a == b and c == d: print 'Hola' elif a != d: print 'Nada que hacer' else: print 'Chao'
  7. Sintaxis sencilla • Otras maneras: – List comprehension: • pares

    = [n for n in xrange(100) if not n % 2] • plus_one = [n + 1 for n in xrange(100)] – Filter: • pares = filter(lambda n: not n % 2, xrange(100)) – Map: • plus_one = map(lambda n: n + 1, xrange(100))
  8. Sintaxis concisa • One-liners fácil: – qsort = lambda seq:

    [] if not seq else qsort(filter(lambda n: n<=seq[0], seq[1:]))+[seq[0]] +qsort(filter(lambda n: n>seq[0], seq[1:]))
  9. Pensando como un Pythonista • Todo es un objeto •

    Hay 3 tipos básicos de colecciones: – Listas (mutables): [1, 2, 3, 4] – Tuplas (no mutables): (1, 2, 3, 4) – Diccionarios (hash): {'foo': 'bar', 'uno': 1} • También maneja tipos primitivos – Enteros – Cadenas de caracteres (no mutables) – ...
  10. Pensando como un Pythonista • Variables vs Bindings No hay

    variables: Sino objetos y nombres: 0010101011 111100101 0x123ffab090ed 42 vida_univ_y_lo_demas
  11. Pensando como un Pythonista • Variables vs Bindings int a

    = 7303014; printf(“%i %s”, a, (char*) &a); ---> 7303014 foo
  12. Pensando como un Pythonista • Variables vs Bindings int a

    = 7303014; printf(“%i %s”, a, (char*) &a); ---> 7303014 foo a 42 >>> a = 42
  13. Pensando como un Pythonista • Variables vs Bindings int a

    = 7303014; printf(“%i %s”, a, (char*) &a); ---> 7303014 foo a 42 “python” >>> a = 42 >>> a = “python”
  14. Pensando como un Pythonista • Variables vs Bindings int a

    = 7303014; printf(“%i %s”, a, (char*) &a); ---> 7303014 foo a 42 “python” >>> a = 42 >>> a = “python” Conteo de referencias
  15. Pensando como un Pythonista • Variables vs Bindings int a

    = 7303014; printf(“%i %s”, a, (char*) &a); ---> 7303014 foo a “python” >>> a = 42 >>> a = “python” Conteo de referencias
  16. Pensando como un Pythonista • Interned Objects a b 99091234328

    99091234328 >>> a = 99091234328 >>> b = 99091234328
  17. Pensando como un Pythonista • Interned Objects a b c

    99091234328 99091234328 4 >>> a = 99091234328 >>> b = 99091234328 >>> c = 4
  18. Pensando como un Pythonista • Interned Objects a b c

    d 99091234328 99091234328 4 >>> a = 99091234328 >>> b = 99091234328 >>> c = 4 >>> d = 4
  19. Pensando como un Pythonista • PEP8: – Identar a 4

    espacios – Escribir “bonito” • a = x + 3 y no a=x+3 – Agrupar código en párrafos – Aprovechar las funciones core – … entre muchas otras cosas • El ZEN de python
  20. Clases • Declaración: – class NombreClase(ClaseBase): class_variables = val def

    __init__(self, params, *args, **kwargs): self.attr = param … • Si no hay clase base, por defecto hereda de: – object
  21. Clases • Declaración: – class NombreClase(ClaseBase): class_variables = val def

    __init__(self, params, *args, **kwargs): self.attr = param … • Si no hay clase base, por defecto hereda de: – object
  22. Métodos de clase • class Clase(ClaseBase): def __init__(self, *args, **kwargs):

    (…) @classmethod def method(cls, *args, **kwargs): (...)
  23. Créditos por las imágenes • http://3.bp.blogspot.com/_W_zETys1xFc/TJd3kmJ7_kI/AAAAAAAABDI/X5q-wepEGLc/s1600/Python.png • http://ninjaide.webfactional.com/static/common/img/logo.256.png • http://wqimg.s3.amazonaws.com/ci/python-223.jpg

    • http://media.boingboing.net/wp-content/uploads/2011/10/dennis_ritchie.jpg • http://upload.wikimedia.org/wikipedia/commons/thumb/6/66/Guido_van_Rossum_OSCON_2006.jpg/200px- Guido_van_Rossum_OSCON_2006.jpg