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
-
Enumerate devuelve una tupla de secuencia (key, val), donde key es el índice del elemento actual.
for key, val in enumerate(collection): -
Sorted ordena todos los objetos iterables.
sorted([2, 1, 3]) => [1, 2, 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'), (..), ..] -
Reversed devuelve un iterador invertido.
list(reversed(range(10)))
Control y Flujo
-
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 -
Uso común del operador for:
for element in iterator : -
‘pass’ - No hace nada, generalmente se usa como sentencia de marcador de posición.
-
Expresión ternaria
value = true-expr if condition else false-expr -
No hay sentencia switch/case, use if/elif en su lugar.
Orientación a Objetos
-
‘object’ es la base de todos los tipos de Python
-
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.
-
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') -
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
- Forma básica
try:
..
except ValueError as e:
print e
except (TypeError, AnotherError):
..
except:
..
finally:
..- 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.
-
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.
-
Comprensión de diccionarios
{key-expr : value-expr for value in collection if condition} -
Comprensión de conjuntos
Forma básica: Igual que la comprensión de listas, solo que usando {} en lugar de []
-
Comprensión de listas anidadas
Forma básica:
[expr for val in collection for innerVal in val if condition]