Python 101 

Ángel Velásquez @angvp

http://angvp.com

Historia rápida (< 1 min)

  • Lanzado en 1991 por Guido Van Rossum
  • El nombre es cortesía de la serie inglesa "Monty Python's flying circus"
  • Licencia PSFL (compatible con licencia)
  • Influenciado por: (ABC, ALGOL, C, Haskell, Icon, Java, Lisp, Modula-3, Perl, Smalltalk)
  • Influenció a: Boo, Cobra, Cython, D, Falcon, Genie, Go, Groovy, Javascript, Ruby

https://es.wikipedia.org/wiki/Python

Algunas consideraciones

  • Todo es un objeto (*)
  • Es débilmente tipado
  • Las líneas no terminan en ';'
  • No usa { } para separar bloques, sino identación y : (para abrir los bloques)
  • Los operadores aritméticos son: suma (+), resta (-), multiplicación (*), división (/), módulo (%), potencia (**)
  • Los operadores de comparación: ==, !=, >
  • También existen operadores como: is, not, is not, and, or, etc. 

https://es.wikipedia.org/wiki/Python

Tipos de datos básicos

  • Boolean: se escriben con True o False
  • Enteros: numero o int() para forzar conversión
  • Cadenas: '' o """múltiples lineas""""
  • Float: punto flotante 
>>> a = 'esta es una cadena'

>>> b = 1

>>> c = False

>>> d = 10.5

Estructura de datos básicas: Tuplas

  • Son inmutables (no se pueden agregar, cambiar o extraer valores)
  • La notación usada cuando se definen son los paréntesis
  • Algunas de las funciones usadas en tuplas son index y count
>>> tupla = ('hola', 'mundo', 'hola', 'como', 'estas')
>>> # hacer esto lo rompe
>>> tupla.append('rompe')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
>>> tupla[0]
'hola' 
>>> tupla.count('hola')
2
>>> tupla.index('como')
3
>>> len(tupla) # con esto se la cantidad de elementos
5

Estructura de datos básicas: Listas

  • Soportan distintos tipos de datos
  • La notación usadas son los corchetes
  • También tiene las funciones index, y count, pero además tiene: pop, append, extend, reverse, sort, remove, insert
>>> lista = ['hola', 1]
# agregamos otro item
lista.append(True)
# resultado de esto
>>> lista
['hola', 1, True]
>>> lista[2]
True
>>> x = lista.pop()
>>> x
True
>>> lista.sort()
>>> lista
[1, 'hola']
>>> lista.reverse()
>>> lista
['hola', 1]

Estructura de datos básicas: Listas

Python maneja la memoria de una forma que puede ser muy óptima (usa referencias a otros objetos parecidos, etc), pero puede dar dolores de cabeza, por ejemplo:

>>> lista = ['hola', 1]
>>> listab = lista
>>> lista.append('nueva')
>>> listab # y creimos que solo tendría hola y 1? PUES NO!
['hola', 1, 'nueva']

Powertip: Copy

>>> lista = ['hola', 1]
>>> listab = lista
>>> lista.append('nueva')
>>> listab # y creimos que solo tendría hola y 1? PUES NO!
>>>
>>>
>>> from copy import copy # copy al rescate!
>>> lista_clone = copy(lista)
>>> lista.append('este no esta')
>>> lista_clone
['hola', 1, 'nueva']

Diccionarios

  • Estructura 'clave': valor
  • La notación general es con llaves { }
  • Algunos métodos incluídos en los diccionarios: keys, iteritems, values, copy
>>> a = {'clave1': 'valor', 'clave2': 'valor2'}
>>> a.keys()
['clave1', 'clave2']
>>> a.values()
['valor', 'valor2']

Ciclos

for y while

for i in range(0, 5):
    print i

j = 0

## Ahora con while

while j < 5:
    j += 1
    print j

Validaciones

Se usa if, else, elif

a = 'hola'
if a == 'mundo':
    print 'aca no entra'
elif a == 'sarasa':
    print 'aca tampoco'
else:
    print 'entro derecho'

Funciones

def funcion_ejemplo():
    return True

def funcion_mas_compleja(parametro):
    return "El parametro es {}".format(parametro)

def mas_parametros(uno, dos):
    for i in range(uno, dos):
        print i


print funcion_ejemplo()
print funcion_mas_compleja('python la rompe')
mas_parametros(10, 5)

Funciones con argumentos

#!/usr/bin/python
def flanders(param, *args):
    print param
    print args[1]


def flanders_dict(**kwargs):
    print kwargs['hola']


lista = ['mundo', 'mundirijillo']
diccionario = {'hola': 'mundirijillo'}
flanders("hola", *lista)

flanders_dict(**diccionario)

Clases

class MiClase(object):
    def __init__(self):
        self.result = 0
        print "Hola soy un constructor"

    def suma(self, a, b):
        self.result = a + b

x = MiClase()
y = MiClase()
x.suma(1, 5)
y.suma(1, 1)
print "La suma de X de dio el resultado de: {}".format(x.result)
print "La suma de X de dio el resultado de: {}".format(y.result)

Ejercicios

  • Imprimir los años bisiestos del 2000 al 2100
  • Escribir una función que detecte si 2 palabras son anagramas

Python 101

By Angel Velásquez

Python 101

Charla para explicar python a unos amigos

  • 504