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