paint-brush
11 consejos y trucos para escribir mejor código Pythonpor@pragativerma
2,264 lecturas
2,264 lecturas

11 consejos y trucos para escribir mejor código Python

por Pragati Verma8m2022/08/16
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Python generalmente usa un bucle `for` para iterar sobre un objeto iterable. Pero hay una forma más fácil y pitónica de hacer esto usando `enumerate() en lugar de un bucle 'for'. La comprensión de listas en lugar de los bucles for sin procesar es una forma de crear listas basadas en las listas existentes. Se puede usar para ordenar los elementos en una lista o secuencia ordenada (tupla, conjunto, conjunto congelado) o colección (conjunto congelado) La sintaxis de una lista por comprensión se ve así: 'HackerNoon'

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - 11 consejos y trucos para escribir mejor código Python
Pragati Verma HackerNoon profile picture


Aquí hay 11 consejos y trucos que te ayudarán a escribir mejor código Python y convertirte en un mejor programador:


1. Iterar con enumerar en lugar o range(len(x))

En Python, generalmente usamos un bucle for para iterar sobre un objeto iterable. Un bucle for en Python utiliza una iteración basada en la colección, es decir, Python asigna el siguiente elemento de un iterable a la variable de bucle en cada iteración. El caso de uso habitual de un bucle for es el siguiente:


 values = ["a", "b", "c"] for value in values: print(value) # a # b # c


Ahora, si además del valor, también desea imprimir el índice, puede hacerlo así:


 index = 0 for value in values: print(index, value) index += 1 # 0 a # 1 b # 2 c


u otra forma común de hacer esto es usando range(len(x)) :


 for index in range(len(values)): value = values[index] print(index, value) # 0 a # 1 b # 2 c


Sin embargo, hay una forma más fácil y pitónica de iterar sobre objetos iterables usando enumerate() . Se usa en un bucle for casi de la misma manera que se usa de la manera habitual, pero en lugar de colocar el objeto iterable directamente después in el bucle for , o usarlo como range(len(values)) , lo coloca dentro los paréntesis de enumerate() como se muestra a continuación:


 for count, value in enumerate(values): print(count, value) # 0 a # 1 b # 2 c


También podemos definir un argumento de start para enumerate() como se muestra a continuación:


 for count, value in enumerate(values, start=1): print(count, value) # 1 a # 2 b # 3 c


La función enumerate() devuelve dos variables:

  • el recuento de la iteración actual
  • el valor del elemento en la iteración actual


Al igual que las variables de bucle en un bucle for , las variables de bucle pueden tener cualquier nombre, por ejemplo, podemos llamarlas index y value y seguirán funcionando. enumerate() es más eficiente que un ciclo for , ya que le ahorra la molestia de recordar acceder al valor dentro del ciclo y usarlo correctamente y luego también recordar avanzar el valor de la variable de ciclo, Python lo maneja automáticamente. .


2. Usa la comprensión de listas en lugar de los bucles for sin formato

La comprensión de listas es una forma más fácil y elegante de definir y crear listas basadas en las listas existentes. Son solo una línea de código que consta de corchetes que contienen la expresión que se ejecuta repetidamente en cada iteración. Por lo tanto, son más eficientes en cuanto al tiempo y el espacio que los bucles y transforman declaraciones iterativas en una sola línea de código.


La sintaxis habitual de una lista por comprensión se ve así:


 newList = [ expression(element) for element in oldList if condition ]


Aquí hay un ejemplo de comprensión de lista en código:


 # Using list comprehension to iterate through loop List = [character for character in 'HackerNoon'] # Displaying list print(List) # Output # ['H', 'a', 'c', 'k', 'e', 'r', 'N', 'o', 'o', 'n']


3. Ordenar iterables complejos con sorted()

La función Python sorted() ordena los elementos de un objeto iterable en un orden específico (ascendente o descendente) y los devuelve como una lista ordenada. Se puede usar para ordenar una secuencia (cadena, tupla, lista) o colección (conjunto, diccionario, conjunto congelado) o cualquier otro iterador.


La sintaxis de la función sorted() es la siguiente:


 sorted(iterable, key=None, reverse=False)


La función sorted() toma como máximo tres parámetros:

  • iterable: podría ser cualquier iterador
  • clave: es un argumento opcional que sirve como clave para la comparación de clasificación.
  • reverse: también es un argumento opcional que se usa para especificar una lista ordenada invertida como salida


4. Almacene valores únicos con conjuntos

Un conjunto de Python almacena una sola copia de los valores duplicados en él. Por lo tanto, se puede usar para verificar valores únicos en una lista. Por ejemplo:


 list_inp = [100, 75, 100, 20, 75, 12, 75, 25] set_res = set(list_inp) print("The unique elements of the input list using set():\n") list_res = (list(set_res)) for item in list_res: print(item)


Entonces, la salida del programa anterior se vería así:


 The unique elements of the input list using set(): 25 75 100 20 12


5. Ahorre memoria con Generadores

La función básica del generador es evaluar los elementos bajo demanda. Es muy similar a la sintaxis para la comprensión de listas, donde en lugar de corchetes, usamos paréntesis.


Consideremos un ejemplo donde queremos imprimir el cuadrado de todos los números pares en una lista:


 myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print("The given list is:", myList) mygen = (element ** 2 for element in myList if element % 2 == 0) print("Elements obtained from the generator are:") for ele in mygen: print(ele)


La salida del código anterior se vería así:


 The given list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Elements obtained from the generator are: 4 16 36 64 100


Habiendo dicho que su sintaxis es bastante similar a la comprensión de listas, debe preguntarse en qué se diferencia de la comprensión de listas o conjuntos. A diferencia de la comprensión de listas o conjuntos, la comprensión del generador no inicializa ningún objeto. Como resultado, puede utilizar la comprensión del generador en lugar de la comprensión de listas o conjuntos para reducir los requisitos de memoria del programa.


6. Defina valores predeterminados en Diccionarios con .get() y .setdefault()


El método .setdefault() permite configurar dict[key]=default si la clave aún no está en dict.


La sintaxis de .setdefault() es similar a la siguiente:


 dict.setdefault(key, default=None)


Aquí hay un fragmento de código de ejemplo para entender cómo usar .setdefault() :


 a_dictionary = {"a": 1, "b": 2, "d": 4} a_dictionary.setdefault("c", 3) print(a_dictionary)


La salida del código anterior se vería así:


 {'a': 1, 'b': 2, 'd': 4, 'c': 3}


También se puede lograr lo mismo utilizando el método .get() al pasar un valor predeterminado para la clave, como puede ver a continuación:


 a_dictionary = {"a": 1, "b": 2, "d": 4} print(a_dictionary.get("c", 3)) print(a_dictionary)


La salida del código anterior se vería así:


 3 {'a': 1, 'b': 2, 'd': 4}


7. Contar objetos hash con collections.Counter

El módulo Colecciones admite tipos de datos de contenedor de alto rendimiento (además de la lista de tipos integrados, dict y tuple) y contiene una variedad de estructuras de datos útiles para almacenar información en la memoria.


Un contador es un contenedor que realiza un seguimiento de la cantidad de veces que se agregan valores iguales.

Puede usarse para implementar los mismos algoritmos que otros lenguajes emplean para implementar estructuras de datos de bolsa o conjunto múltiple.


Importar colecciones hace que el material de las colecciones esté disponible como:

 import collections


Como solo vamos a usar el Contador, simplemente podemos hacer esto:


 from collections import Counter


Se puede utilizar de la siguiente manera:


 import collections c = collections.Counter('abcdaab') for letter in 'abcde': print '%s : %d' % (letter, c[letter])


La salida del código anterior se vería así:


 a : 3 b : 2 c : 1 d : 1 e : 0


8. Cadenas de formato con f-Strings (Python 3.6+)

f-strings, también llamados "literales de cadena con formato", son una forma nueva y más pitónica de formatear cadenas, compatible con Python 3.6+. Son una forma más rápida, más legible, más concisa y menos propensa a errores de formatear cadenas en Python.


Como dice el nombre "f-string", son cadenas literales que tienen una f al principio y llaves que contienen expresiones que se reemplazarán con sus valores en el tiempo de ejecución y luego se formatearán usando el protocolo __format__ .


f-strings se puede utilizar de la siguiente manera:


 name = "Eric" age = 74 print(f"Hello, {name}. You are {age}.") # 'Hello, Eric. You are 74.'


9. Concatenar cadenas con .join()

En Python, podemos usar el método .join() para concatenar una lista de cadenas en una sola cadena. La sintaxis habitual para este método se ve a continuación:


 'String to insert'.join([List of strings])


Se puede usar de varias maneras: si usa la cadena vacía ““ , [Lista de cadenas] simplemente se concatena, y si usa una coma, se crea una cadena delimitada por comas. Cuando se usa el carácter de nueva línea \n , se agrega una nueva línea después de cada cadena. Vea el ejemplo a continuación:


 l = ['aaa', 'bbb', 'ccc'] s = ''.join(l) print(s) # aaabbbccc s = ','.join(l) print(s) # aaa,bbb,ccc s = '-'.join(l) print(s) # aaa-bbb-ccc s = '\n'.join(l) print(s) # aaa # bbb # ccc


10. Combinar diccionarios con {**d1, **d2} (Python 3.5+)

La forma más sencilla de fusionar diccionarios es utilizando el operador de desempaquetado ( ** ). La sintaxis de este método se ve así:


 {**dict1, **dict2, **dict3}


Aquí hay un ejemplo para entender mejor este método:


 d1 = {'k1': 1, 'k2': 2} d2 = {'k3': 3, 'k4': 4} print({**d1, **d2}) # {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}


11. Simplifique las declaraciones if con if x in list

Supongamos que tenemos una lista con los colores primarios rojo, verde y azul. Y en algún lugar de nuestro código, tenemos una nueva variable con un color, entonces c = rojo. Luego veremos si este es uno de nuestros colores primarios. Por supuesto, podemos verificar esto con cada elemento de nuestra lista de la siguiente manera:


 colors = ["red", "green", "blue"] c = "red" # cumbersome and error-prone if c == "red" or c == "green" or c == "blue": print("is main color")


Sin embargo, esto puede llevar bastante tiempo y podemos cometer errores fácilmente, como si tuviéramos un error tipográfico aquí para el rojo. Es más simple y mucho más preferible usar la expresión si x en la lista:


 colors = ["red", "green", "blue"] c = "red" # better: if c in colors: print("is main color")


Conclusión

Python es un lenguaje de programación ampliamente utilizado y, al utilizar los consejos y trucos anteriores, puede convertirse en un mejor programador de Python.


Espero que este artículo haya sido útil. ¡Sigue leyendo!