Hola, les saluda Miguel y aquí les traigo un nuevo post.
Índice
Errores que probablemente ha cometido todo desarrollador
Python a pesar de ser el lenguaje de programación más buscado, con una sintaxis fácil y una curva de aprendizaje que puede sorprender a los desarrolladores en ocasiones. Es común ignorar el poder idiomático del lenguaje, especialmente cuando se está empezando.
Puedes ser un programador senior de Python o sólo un novato que está encontrando su lugar. En ambos casos, probablemente habrías cometido los siguientes errores. O presenciado a un colega haciendo lo mismo.
Así que, veamos los tres defectos más comunes que los programadores de Python explotan, a lo que puede conducir y cómo evitarlo.
Acceder a los valores del diccionario mediante la sintaxis de corchetes
Los diccionarios son tipos de datos que se utilizan para mantener una colección desordenada de pares clave-valor.
Aunque los diccionarios son fundamentalmente muy diferentes de las listas, es fácil empantanarse y usar la notación de corchetes para acceder a los valores.
Si bien no parece perjudicial al principio, pero al acceder a los valores usando corchetes, uno puede terminar fácilmente con KeyError
como se muestra a continuación:
>>> fruits = 'a': 'apple', 'b': 'banana' >>> fruits['a'] #apple>>> fruits['c'] #raises KeyError: 'c'
En el caso de los diccionarios, KeyError
significa que no se puede encontrar la clave que se busca. Estos errores son bastante comunes, especialmente si está pasando una clave dinámica.
Si bien puede evitar estos errores utilizando try-except
bloques pero eso no es pitónico. Además, solo conduciría a un código detallado.
Solución: use el método get () en su lugar
Simplemente puede acceder a los valores del diccionario pasando la clave dentro del get()
método. En caso de que no se encuentre la clave, simplemente regresará None
en lugar de lanzar un error.
Opcionalmente, también puede pasar un valor predeterminado como segundo argumento del método.
fruits.get('m') #returns Nonefruits.get('m', 'mango')
Para casos específicos en los que desee modificar el diccionario si la clave no está presente, puede utilizar el setdefault()
método.
Si la clave existe, setdefault()
devuelve el valor respectivo. De lo contrario, establece el valor predeterminado (None
o lo que especifique) para esa clave y actualiza el diccionario en su lugar.
Estilo C primitivo para los bucles
Porque los bucles son el flujo de control más utilizado en cualquier lenguaje de programación.
A menudo los desarrolladores, especialmente cuando se pasa de otro lenguaje, terminan usando el estilo primitivo de los bucles de forma bastante instintiva, como se muestra a continuación:
numbers = [1,4,7,10,15]for i in range(len(numbers)): print(numbers[i])
La forma anterior de utilizar el rango para iterar sobre una lista utilizando un índice no sólo es no pitónica sino también innecesaria.
Las listas pitónicas son iterables por defecto, por lo que se puede usar directamente lo siguiente:
for n in numbers: print(n)
Ahora, puede que quieras acceder a los valores de los índices. En tales casos, puedes usar la función enumerate()
pasando la lista de Python como se muestra a continuación:
for i, num in enumerate(numbers): print(i, num)
En el caso de los diccionarios, si está buscando acceder solo a los valores, use .values()
. De lo contrario, invoca items()
si quieres iterar sobre la clave y el valor.
for k, fruit in fruits.items()
Otra función incorporada zip()
, puede utilizarse cuando se desea iterar sobre dos o más listas simultáneamente y acceder a elementos en forma de tupla.
Argumentos por defecto mutables
El uso de argumentos por defecto es un error bastante común en Python en el que se establece un valor predefinido en la definición de la función para evitar una larga lista de argumentos en el momento de la llamada. Te permite opcionalmente cambiar el valor en el sitio de invocación de la función.
Ahora, con las listas, diccionarios y conjuntos de Python que son tipos mutables, establecer un valor predefinido puede sorprenderte con resultados inesperados como se muestra a continuación:
def addElements(x, a=[]): a.append(x) return alistA = addElements(5) #prints [5]listB = addElements(10) # [5, 10]
Como pueden ver, esperábamos que la segunda lista contuviera un solo elemento, pero también contiene el elemento anterior.
El problema con los objetos por defecto mutables en Python es que se evalúan sólo una vez cuando la función fue definida.
Así, cada vez que se llama a la función, se utiliza el valor mutado que puede contener el contenido anterior. Esto puede llevar a problemas inesperados ya que necesitarías mantener un seguimiento de las llamadas a la función a lo largo de la base de código.
Para evitar estos desagradables errores, establecer None
como valor por defecto y asignar la variable mutable dentro de una función es una mejor opción.
Esto es lo que deberías hacer en su lugar:
def addElements(x, a=None):
if a is None:
a = []
a.append(x)
return a
Conclusión
Vimos tres errores bastante comunes que los programadores de Python cometen. Es importante entender y aprovechar el poder idiomático del lenguaje y no evitar las partes místicas.
Usar formas pitónicas de escribir código en lugar de caer en construcciones generales que son comunes en los lenguajes de programación.
Eso es todo. Gracias por leer.
Añadir comentario