Skip to content

Hoja de trucos del lenguaje Python

Python es un lenguaje de programación informática multiplataforma. Es un lenguaje de tipado dinámico orientado a objetos, diseñado originalmente para escribir scripts automatizados (shell). Con la actualización continua de versiones y la adición de nuevas características del lenguaje, se utiliza cada vez más para el desarrollo de proyectos independientes a gran escala.

General

  • Python distingue entre mayúsculas y minúsculas
  • La indexación en Python comienza en 0
  • Python utiliza espacios en blanco (tabuladores o espacios) para indentar el código en lugar de utilizar llaves.

Ayuda

Inicio de ayuda help()
Ayuda de función help(str.replace)
Ayuda de módulo help(re)

Módulos (Librerías)

Listar contenido del módulo dir(module1)
Cargar módulo import module1 *
Llamar función desde módulo module1.func1()

La sentencia import crea un nuevo espacio de nombres y ejecuta todas las sentencias en el archivo .py asociado con ese espacio de nombres. Si desea cargar el contenido del módulo en el espacio de nombres actual, utilice “from module1 import *”

Tipos Escalares

Comprobar tipo de dato: type(variable)

Enteros

int/long - Los enteros grandes se convierten automáticamente en enteros largos

Flotantes

float - 64 bits, no hay tipo “double”

Booleanos

bool - Verdadero (True) o Falso (False)

Cadenas de texto (Strings)

str - Python 2.x por defecto: ASCII; Python 3: Unicode

  • Las cadenas pueden ser comillas simples/dobles/triples
  • Una cadena es una secuencia de caracteres, por lo que puede tratarse como cualquier otra secuencia
  • Los caracteres especiales se pueden completar comenzando con \ o r
    str1 = r'this\f?ff'
  • El formateo de cadenas se puede lograr de múltiples maneras
    template = '%.2f %s haha $%d'
    str1 = template % (4.88, 'hola', 2)

str(), bool(), int() y float() también son funciones de conversión de tipos explícitas

Valor Nulo

NoneType(None) - Valor ’null’ de Python (solo existe una instancia del objeto None)

  • None no es una palabra clave reservada, sino la única instancia de “NoneType”
  • None es un valor por defecto común para parámetros opcionales de funciones:
    def func1(a, b, c = None)
  • Uso común de None:
    if variable is None :

Fecha y Hora (Datetime)

datetime - Módulo “datetime” incorporado de Python, que proporciona los tipos “datetime”, “date”, “time”, etc.

  • “datetime” combina la información almacenada en “date” y “time”
    Crear datetime desde cadena dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’)
    Obtener objeto “date” dt1.date()
    Obtener objeto “time” dt1.time()
    Formatear datetime a cadena dt1.strftime(’%m/%d/%Y %H:%M’)
    Modificar valores de campos dt2 = dt1.replace(minute = 0, second=30)
    Obtener diferencia diff = dt1 - dt2 # diff es un objeto ‘datetime.timedelta’

Estructuras de Datos

Tuplas

Una tupla es una secuencia de longitud fija e inmutable.

Crear tupla tup1=4,5,6 o tup1 = (6,7,8)
Crear tupla anidada tup1 = (4,5,6), (7,8)
Convertir secuencia o iterador a tupla tuple([1, 0, 2])
Concatenar tuplas tup1 + tup2
Desempaquetar tupla a, b, c = tup1
Intercambiar variables b, a = a, b

Listas

Una lista es una secuencia de elementos de longitud variable y mutable.

Crear lista list1 = [1, ‘a’, 3] o list1 = list(tup1)
Concatenar listas list1 + list2 o list1.extend(list2)
Añadir a la lista list1.append(‘b’)
Insertar en posición especificada list1.insert(posIdx, ‘b’) **
Eliminar elemento por índice valueAtIdx = list1.pop(posIdx)
Eliminar primera ocurrencia de un valor list1.remove(‘a’)
Comprobar si un valor existe en la lista 3 in list1 => True ***
Ordenar lista list1.sort()
Ordenar usando función proporcionada por el usuario list1.sort(key = len) # Ordenar por longitud

Nota:

  • El índice de “inicio” se incluye, pero el índice de “parada” no.
  • inicio/parada pueden omitirse, por defecto al principio/final.

Slicing (Rebanado)

Los tipos de secuencia incluyen ‘str’, ‘array’, ’tuple’, ’list’, etc.

list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]

Diccionarios (Hashes)

Crear diccionario dict1 ={‘key1’ :‘value1’, 2 :[3, 2]}
Construir diccionario mediante función de mapeo dict(zip(keyList, valueList))
Obtener elemento dict1[‘key1’]
Cambiar/Añadir elemento dict1[‘key1’] = ’newValue’
Obtener valor, devolver por defecto si no existe dict1.get(‘key1’, defaultValue)
Comprobar si existe la clave ‘key1’ in dict1
Borrar elemento del dict1[‘key1’]
Obtener lista de claves (Keys) dict1.keys()
Obtener lista de valores (Values) dict1.values()
Actualizar valores dict1.update(dict2) # valores de dict1 reemplazados por dict2

Conjuntos (Sets)

Un conjunto es una colección desordenada de elementos únicos.

Crear conjunto set([3, 6, 3]) o {3, 6, 3}
Comprobar si set1 es un subconjunto de set2 set1.issubset(set2)
Comprobar si set2 es un subconjunto de set1 set1.issuperset(set2)
Comprobar si los conjuntos son idénticos set1 == set2
Unión (o) set1
Intersección (y) set1 & set2
Diferencia set1 - set2
Diferencia simétrica (xor) set1 ^ set2

Funciones

  • Forma básica

    def func1(posArg1, keywordArg1 = 1, ..):
  • Uso común de “Las funciones son objetos”:

    def func1(ops = [str.strip, user_define_func, ..], ..):
        for function in ops:
            value = function(value)
  • Valores de retorno

    • Si no hay una sentencia return al final de una función, no devuelve ningún valor.
    • Devolver múltiples valores a través de un objeto tupla
     return (value1, value2)
    
     value1, value2 = func1(..)
  • Funciones anónimas (Lambda)

    lambda x : x * 2
    # def func1(x) : return x * 2

Funciones comúnmente utilizadas

  1. Enumerate devuelve una tupla de secuencia (key, val), donde key es el índice del elemento actual.

    for key, val in enumerate(collection):
  2. Sorted ordena todos los objetos iterables.

    sorted([2, 1, 3]) => [1, 2, 3]
  3. Zip empaqueta los elementos correspondientes de los objetos en tuplas y devuelve una lista de estas tuplas.

    zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..]
  4. Reversed devuelve un iterador invertido.

    list(reversed(range(10)))

Control y Flujo

  1. Operadores para condiciones “if else”:

    Comprobar si dos variables son el mismo objeto var1 is var2
    Comprobar si dos variables son objetos diferentes var1 is not var2
    Comprobar si dos variables tienen el mismo valor var1 == var2
  2. Uso común del operador for:

    for element in iterator :
  3. ‘pass’ - No hace nada, generalmente se usa como sentencia de marcador de posición.

  4. Expresión ternaria

    value = true-expr if condition else false-expr
  5. No hay sentencia switch/case, use if/elif en su lugar.

Orientación a Objetos

  1. ‘object’ es la base de todos los tipos de Python

  2. Todo (números, cadenas, funciones, clases, módulos, etc.) es un objeto, y cada objeto tiene un ’type’. Las variables de objeto son punteros a su ubicación en la memoria.

  3. Forma básica de un objeto

    class MyObject(object):
        # 'self' es equivalente a 'this' en Java/C++
        def __init__(self, name):
            self.name = name
    
        def memberFunc1(self, arg1):
            ..
    
        @staticmethod
        def classFunc2(arg1):
            ..
    
    obj1 = MyObject('name1') 
    obj1.memberFunc1('a') 
    MyObject.classFunc2('b')
  4. Herramienta interactiva:

    dir(variable1) # Lista todos los métodos disponibles en el objeto

Operaciones con Cadenas

Unir listas/tuplas usando un delimitador

', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'

Formatear cadena

string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')

Dividir cadena

sep = '-'
stringList1 = string1.split(sep)

Obtener subcadena

start = 1
string1[start:8]

Rellenar cadena con ceros

month = '5'
month.zfill(2) => '05' 
month = '12'
month.zfill(2) => '12'

Manejo de Excepciones

  1. Forma básica
try:
    ..
except ValueError as e:
    print e
except (TypeError, AnotherError):
    ..
except:
    ..
finally:
    ..
  1. Lanzar excepciones manualmente
raise AssertionError # Error de aserción
raise SystemExit # Solicitar salida del programa
raise RuntimeError('Mensaje de error: ..')

Comprensión de Listas, Conjuntos y Diccionarios

Azúcar sintáctico para hacer que el código sea más fácil de leer y escribir.

  1. Comprensión de listas

    Forma concisamente una nueva lista filtrando elementos de una colección y transformando los elementos que pasan el filtro en una sola expresión.

    Forma básica

    [expr for val in collection if condition]

    Atajo:

    result = []
    for val in collection:
        if condition:
            result.append(expr)

    La condición de filtro se puede omitir, dejando solo la expresión.

  2. Comprensión de diccionarios

    {key-expr : value-expr for value in collection if condition}
  3. Comprensión de conjuntos

    Forma básica: Igual que la comprensión de listas, solo que usando {} en lugar de []

  4. Comprensión de listas anidadas

    Forma básica:

    [expr for val in collection for innerVal in val if condition]