Dominar la codificación en Python

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.

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)]

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))

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}')

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

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')

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))

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:collectionsCounterdefaultdictdeque

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)

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))

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:functoolspartial

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

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

Dominar estas técnicas avanzadas y mejores prácticas le permite escribir código Python más eficiente, legible y fácil de mantener. Aprender y practicar continuamente estos conceptos te ayudará a convertirte en un programador de Python más eficaz.

Lee mis artículos de Oiga Profe directamente en su bandeja de entrada. Suscríbete al newsletter y no te lo pierdas.

Por favor, activa JavaScript en tu navegador para completar este formulario.
Nombre completo
E-mail

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Hola