La flexibilidad y legibilidad de Python lo convierten en una opción popular para los desarrolladores. Sin embargo, dominar la codificación en Python requiere algo más que conocer los conceptos básicos. En esta guía completa, nos sumergiremos en técnicas avanzadas y mejores prácticas que llevarán sus habilidades de codificación Python al siguiente nivel.
1. Comprensiones de listas:
Las comprensiones de listas son una forma poderosa de crear listas en Python. Proporcionan una sintaxis concisa y legible para generar listas a partir de otros iterables. He aquí un ejemplo detallado:
# Usando un ciclo
squared_numbers = []
for num in range(1, 6):
squared_numbers.append(num ** 2)
# Usando una comprensión de lista
squared_numbers = [num ** 2 for num in range(1, 6)]
2. Evite usar con cuerdas en bucles:+=
Anexar cadenas dentro de un bucle puede ser ineficaz, especialmente para cadenas grandes, porque las cadenas en Python son inmutables. Cada vez que se utiliza , se crea un nuevo objeto de cadena. En su lugar, utilice el método para concatenar cadenas de forma eficaz:+=
+=
str.join()
# Ineficiente
result = ''
for i in range(1000):
result += str(i)
# Eficiente
result = ''.join(str(i) for i in range(1000))
3. Úselo para iterar con índice:enumerate
Cuando necesite iterar sobre una secuencia y también necesite el índice de cada elemento, use la función enumerate
. Devuelve tuplas que contienen el índice y el valor de cada componente de la secuencia:
names = ['Alice', 'Bob', 'Charlie']
for i, name in enumerate(names):
print(f'{i}: {name}')
4. Utilice la declaración para el manejo de archivos:with
Al trabajar con archivos, utilice la instrucción with
para asegurarse de que el archivo se cierra correctamente después de ejecutar el bloque de código, incluso si se produce una excepción:
with open('file.txt', 'r') as file:
data = file.read()
# Procesa el dato
5. Prefiera conjuntos para pruebas de membresía:
Si necesita probar la pertenencia (es decir, si un elemento está presente) en una colección, considere la posibilidad de usar un conjunto en lugar de una lista o tupla para obtener un mejor rendimiento:
names = {'Alice', 'Bob', 'Charlie'}
if 'Alice' in names:
print('Alice is in the set')
6. Utilice expresiones generadoras para la eficiencia de la memoria:
Las expresiones generadoras son similares a las comprensiones de lista, pero devuelven un iterador en lugar de una lista. Son más eficientes en cuanto a la memoria cuando se trata de grandes conjuntos de datos:
# Lista de comprensión
squared_numbers = [num ** 2 for num in range(1, 1000000)]
# Generador de expresiones
squared_numbers = (num ** 2 for num in range(1, 1000000))
7. Utilice el módulo para estructuras de datos avanzadas:collections
El módulo proporciona una variedad de estructuras de datos útiles más allá de los tipos incorporados como listas y diccionarios. Por ejemplo, para contar las ocurrencias de los elementos de una colección, para controlar las claves que faltan en los diccionarios y para anexar y extraer de manera eficiente desde ambos extremos de una secuencia:collections
Counter
defaultdict
deque
from collections import Counter, defaultdict, deque
# Cuenta ocurrencias de elementos en una lista
numbers = [1, 2, 3, 1, 2, 3, 4, 5]
counter = Counter(numbers)
print(counter)
# Crea un diccionario con valores predeterminados
default_dict = defaultdict(int)
default_dict['key'] += 1
print(default_dict['key'])
# Crea un cola
d = deque([1, 2, 3])
d.append(4)
d.appendleft(0)
print(d)
8. Utilice el módulo para las herramientas de iteración:itertools
El módulo proporciona una colección de herramientas para manejar iteradores. Incluye funciones para crear iteradores para tareas comunes como permutaciones, combinaciones y productos cartesianos:itertools
from itertools import permutations, combinations, product
# Genera permutaciones de una secuencia
perms = permutations('abc', 2)
print(list(perms))
# Genera combinaciones de una secuencia
combs = combinations('abcd', 2)
print(list(combs))
# Genera producto cartesiano de dos secuencias
cartesian = product('AB', '12')
print(list(cartesian))
9. Utilice el módulo para funciones de orden superior:functools
El módulo proporciona funciones de orden superior que se pueden utilizar para manipular funciones y argumentos. Por ejemplo, se puede usar para crear una nueva función con algunos argumentos pre-rellenados:functools
partial
from functools import partial
# Crea una nueva función con un argumento
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
print(square(3)) # Output: 9
10. Utilice el módulo para registrar:logging
El módulo de registro
proporciona un marco flexible para el registro en Python. Le permite registrar mensajes con diferentes niveles de gravedad, formatear mensajes de registro y redirigir mensajes de registro a diferentes destinos:
import logging
# Configurando la librería logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# Log messages
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
Conclusión
Lee mis artículos de Oiga Profe directamente en su bandeja de entrada. Suscríbete al newsletter y no te lo pierdas.