Skip to content

Hoja de trucos del lenguaje Python

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

General

  • Python distingue entre mayúsculas y minúsculas
  • El índice de Python comienza en 0
  • Python utiliza espacios en blanco (tabulaciones o espacios) para indentar el código en lugar de utilizar llaves.

Ayuda (Help)

Página de inicio de ayuda help()
Ayuda de funciones help(str.replace)
Ayuda de módulos help(re)

Módulos (Librerías)

Listar contenido del módulo dir(module1)
Cargar módulo import module1 *
Llamar a una función de un módulo module1.func1()

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

Tipos escalares

Comprobar el tipo de datos: type(variable)

Enteros (Integers)

int/long - Los enteros grandes se convierten automáticamente en enteros largos (en Python 3, solo hay int, que maneja cualquier tamaño).

Flotantes (Floats)

float - 64 bits, no hay tipo “double”.

Booleanos (Booleans)

bool - Verdadero (True) o Falso (False).

Cadenas de texto (Strings)

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

  • Las cadenas pueden estar entre comillas simples/dobles/triples.
  • Una cadena es una secuencia de caracteres, por lo que puede tratarse como cualquier otra secuencia.
  • Los caracteres especiales pueden representarse precedidos de \ o r (cadenas crudas / raw strings).
    str1 = r'esto\f?ff'
  • El formato de cadena se puede lograr de varias 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 tipo explícitas.

Valor nulo (Null)

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 predeterminado común para parámetros de función opcionales:
    def func1(a, b, c = None)
  • Uso común de None:
    if variable is None :

Fecha y hora (Datetime)

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

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

Estructuras de datos

Tuplas (Tuples)

Una tupla es una secuencia de longitud fija e inmutable.

Crear tupla tup1=4,5,6 or 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 (Lists)

Una lista es una secuencia de longitud variable y modificable.

Crear lista list1 = [1, ‘a’, 3] or list1 = list(tup1)
Concatenar listas list1 + list2 or list1.extend(list2)
Añadir a la lista list1.append(‘b’)
Insertar en posición específica list1.insert(posIdx, ‘b’)
Eliminar mediante índice valueAtIdx = list1.pop(posIdx)
Eliminar el primer valor coincidente list1.remove(‘a’)
Comprobar si un valor existe 3 in list1 => True
Ordenar lista list1.sort()
Ordenar con una función personalizada list1.sort(key = len) # ordenar por longitud

Nota:

  • El índice de “inicio” (start) está incluido, pero el índice de “parada” (stop) no.
  • start/stop pueden omitirse, por defecto es el inicio/final.

Rebanado (Slicing)

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

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

Diccionarios (Hash)

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

Conjuntos (Sets)

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

Crear conjunto set([3, 6, 3]) or {3, 6, 3}
Comprobar si es subconjunto set1.issubset(set2)
Comprobar si es superconjunto set1.issuperset(set2)
Comprobar si son iguales set1 == set2
Unión (or) set1
Intersección (and) 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 sentencia return, no devuelve ningún valor (None).
    • Devolver múltiples valores a través de una tupla.
    return (value1, value2)
    
    value1, value2 = func1(..)
  • Funciones anónimas (Lambda):

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

Funciones comunes

  1. Enumerate: devuelve una secuencia de tuplas (índice, valor), donde el índice es la posición actual.

    for key, val in enumerate(collection):
  2. Sorted: ordena cualquier objeto iterable.

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

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

    list(reversed(range(10)))

Control de flujo

  1. Operadores de condición “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, se utiliza generalmente como marcador de posición.

  4. Expresión ternaria:

    value = true-expr if condition else false-expr
  5. No hay sentencias switch/case; se utiliza if/elif.

Orientación a objetos (OOP)

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

  2. Cualquier cosa (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. Herramientas interactivas:

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

Operaciones con cadenas

Unir lista/tupla con un separador:

', '.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 excepción manualmente:
raise AssertionError # Error de aserción
raise SystemExit # Solicitar la salida del programa
raise RuntimeError('Mensaje de error :..')

Comprensiones de listas, conjuntos y diccionarios

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

  1. Comprensión de listas:

    Forma concisa de crear una nueva lista filtrando elementos de una colección y transformando los que pasan el filtro.

    Forma básica:

    [expr for val in collection if condition]

    Atajo para:

    result = []
    for val in collection:
        if condition:
            result.append(expr)
  2. Comprensión de diccionarios:

    {key-expr : value-expr for value in collection if condition}
  3. Comprensión de conjuntos: Igual que la de listas, pero usando {} en lugar de [].

  4. Comprensión de listas anidadas:

    Forma básica:

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