Lo bueno, lo feo y lo malo

Una introducción a Python

A. Pablo Hinojosa.

http://www.psicobyte.com

@psicobyte_

https://github.com/psicobyte

"El bueno, el feo y el malo" es un spaghetti western.

Dicen que el spaghetti western es un subgénero.

Pero la mayoría de las películas del oeste que puedes recordar son spaghetti western.

No te fíes de lo que dicen.

Python es un lenguaje de script.

Dicen que los lenguajes de script son peores.

Que siempre será mejor un lenguaje compilado.

No te fíes de lo que dicen.

Python es multiplataforma.

Python es multiparadigma.

Python es dinámicamente tipado.

Python es fuertemente tipado.

Una buena historia siempre comienza presentando los protagonistas.

Variables y tipos de dato
#!/usr/bin/python
# -*- coding: utf-8 -*-
titulo = "El Bueno, el feo y el malo"
director = "Sergio Leone"
estreno = 1966
esta_peli_mola = True

# Presentamos los protas
personajes = ["El Bueno", "El Feo", "El Malo"]
print personajes[1]

actores = {"El Bueno": "Clint Eastwood", \
"El Feo": "Eli Wallach", "El Malo": "Lee Van Cleef"}

print actores["El Bueno"]
print actores[personajes[1]]

Unicode en Python 2.

Eso es feo.

No puede haber spaghetti western sin disparos.

Ni lenguaje sin estructuras de control.

# Todos disparan a todos, claro
personajes = ["El Bueno", "El Feo", "El Malo"]
for tirador in personajes:
    for objetivo in personajes:
        if tirador != objetivo:
            print tirador + " dispara a " + objetivo
        if tirador == "El Malo" and objetivo == "El Bueno":
            print "Y falla"

# hasta acabar el cargador...
i = 0
while i < 6:
    print "BANG!"
    i += 1
                

En el cine, los espacios en blanco importan.

En Python también.

# Todos disparan a todos, claro
personajes = ["El Bueno", "El Feo", "El Malo"]
for tirador in personajes:
    for objetivo in personajes:
        if tirador != objetivo:
            print tirador + " dispara a " + objetivo
        if tirador == "El Malo" and objetivo == "El Bueno":
            print "Y falla"

# hasta acabar el cargador...
i = 0
while i < 6:
    print "BANG!"
    i += 1
                

Python está diseñado para ser claro y sencillo. Fácil de leer y de escribir.

Eso es bueno.

Tuco puede construir una pistola reutilizando piezas de otras.

Nosotros preferimos usar funciones.

def soldados(color):
    if color == "azul":
        print "Viva el Norte"
    elif color == "gris":
        print "Viva el Sur, muerte a los yanquis"
    else:
        print "Eh?"

soldados("azul")
                
...mejor con return

def soldados_ret(color):
    if color == "azul":
        return "Viva el Norte"
    elif color == "gris":
        return "Viva el Sur, muerte a los yanquis."
    else:
        return "Eh?"

texto = soldados_ret("gris")
print texto
                

La trilogía del dólar (que no es una trilogía).

Por un puñado de dólares.

La muerte tenía un precio.

El bueno, el feo y el malo.

Clases y objetos.

class Film:
    def __init__(self, title, year, director):
        self.title = title
        self.year = year
        self.director = director

    def muestra(self):
        print "Película: " + self.title
        print "Año: " + self.year
        print "Director: " + self.director

peli = Film("El bueno, el feo y el malo", 1966, "Sergio Leone")

peli.muestra()

Python tiene una cómoda curva de aprendizaje.

Eso es bueno.

"El mundo se divide en dos categorías: los que tienen un revólver cargado y los que cavan"

Y los programadores en los que tienen módulos y los que escriben.

import imdb
datos = imdb.IMDb()

resp = datos.search_movie("El bueno, el feo y el malo")

for peli in resp:
    print peli['long imdb title']
                

Python vienen con "pilas incluídas": Una completa selección de módulos ya instalados.

Eso es bueno.

Durante la guerra de secesión convivieron dos tipos de armas: De avancarga y de casquillo.

(pero da igual, porque en todas las películas están siempre mal)

Ahora conviven dos versiones de Python.

#!/usr/bin/python2

print "Cada revolver tiene su voz, y esa la conozco."
                

#!/usr/bin/python3

print("Cuando se dispara, no se dice nada.")
                

Python 3 es mejor y soluciona problemas de Python 2, pero aún hay muchos módulos no soportados.

Eso es feo.

Varias implementaciones de Python:
  • CPython: El Python de referencia.
  • PyPy: Subconjunto estáticamente tipado. Muy rápido.
  • Jython: compila bytecode de Java.
  • IronPython: Para .NET.

CPython y el Global Interpreter Lock.

Eso es malo.

Python tiene una gran y activa comunidad.

Eso es bueno.

Muchas Gracias.

¿Preguntas?

https://psicobyte.github.io/CharlaPyday2016

Fuente de las imágenes: