codigo python

5 formas de escribir más código pitónico

La codificación es una forma de arte. Aquí le mostramos cómo elevar la calidad y la legibilidad de su código de Python.

Cuando decidas aprender un lenguaje de programación, tendrás que investigar qué lenguaje se adapta mejor a tu proyecto. Una de las cosas que puede considerar, especialmente si este es su primer lenguaje de programación, es cuán fácil es aprender y usar el lenguaje.

Todos los lenguajes de programación son diferentes. Algunos son difíciles de aprender, pero una vez que conoce los conceptos básicos, puede escribir código sólido. Por otro lado, algunos lenguajes de programación son fáciles de aprender al principio, pero dominarlos y escribir un código sólido puede no ser tan simple.

Python es uno de los lenguajes de programación que son fáciles de aprender y comenzar a codificar, pero producir un código Python sólido y potente requiere mucha práctica.

Escribir buen código Python o, como se le llama en la comunidad, código «Pythonic» no es difícil; de hecho, puedes simplemente seguir este conjunto de reglas . El código Pythonic es solo una descripción de un código que es fácil de leer, seguir y comprender. Si sigue estas reglas, se le considerará fluido en Python.

Para tener fluidez en Python, deberá usar expresiones idiomáticas para escribir código Pythonic. La única forma de hacerlo es practicar.

Las reglas del código Pythonic no son complejas y si no conoce ningún otro lenguaje de programación, las encontrará perfectamente sensatas. (Algunas personas tienen problemas cuando provienen de otro idioma y tienen que adaptarse a la forma en que la comunidad de Python hace las cosas). Por supuesto, estas reglas son realmente solo para ayudar a que su código sea fácil de leer, seguir y comprender. No están grabados en piedra, así que juega con ellos.

Relacionado: Cómo escribir un buen pseudocódigo

1. Estilo de escritura general

Comencemos con cómo escribir comandos en Python. Cuando escribimos comandos en Python, PEP8 sugiere cortar las líneas físicas después de 79 caracteres para que sean más legibles. Digamos que quiere escribir una lista de cadenas; en lugar de escribir todo en una línea muy larga, puede escribir cada elemento en una nueva línea.

someList = [ "this list has very very long strings",

"to make it more readable, each string will be",

"in a new line."]

Puedes hacer lo mismo con las cuerdas. Si tiene una cadena larga, puede usar paréntesis alrededor de su cadena para contenerla y hacerla más legible.

longStr = (

"this sting is very very long"

"to make it more readable, each sting will be"

"in a new line."

)

Los 79 caracteres por línea física de código no son una regla estricta; puede extenderlo a 88 o incluso 100 caracteres según su código y lo que crea que será más apropiado para su proyecto. Sin embargo, la biblioteca estándar de Python requiere limitar las líneas a 79 caracteres si está escribiendo comandos de codificación y 72 en el caso de cadenas de documentación o comentarios.

2. Usando trucos variables

Python ofrece muchas opciones que le permiten escribir comandos simples que contienen operaciones de asignación de variables. Quizás el truco de variables más útil en Python es el desempaquetado de variables. El desempaquetado es simplemente una forma eficiente y breve de asignar valores a las variables, como el intercambio de valores de variables.

x, y = y, x

O desempaquetar tuplas, por ejemplo:

a, (b, c) = 10, (20, 30)

Incluso puede hacer un desempaquetado prolongado, por ejemplo:

v, *end = [10, 20, 30]

# gives v= 1, end = [2, 3]

v, *middle, z= [1, 2, 3, 4]

# gives v= 1, middle = [2, 3], z= 4

Desempaquetar no es el único truco que puede usar con las variables. También hay una forma Pythonic de tratar con variables ignoradas o variables que tienen un trabajo específico. Después de eso, no son necesarios y nombrarlos no es una tarea que valga la pena. En el ejemplo de desempaquetado extendido, digamos que no necesito el último elemento de la lista, entonces puedo evitar nombrarlo y usar__ .

v, *middle, z= [1, 2, 3, 4]

# gives v= 1, middle = [2, 3]

La razón por la que recomiendo usar __en lugar de solo _(que a menudo vemos en los libros de Python) es que el guión bajo único se refiere a la gettext()función, que usamos en el aviso interactivo para almacenar el valor del último comando. Por lo tanto, usar the __es solo una forma de evitar confusiones y ser coherente.

3. Manejo de listas

Las listas son una gran parte de Python, por lo que varias técnicas de listas hacen que su código sea más Pythonic. Comencemos con la inicialización de la lista. En Python, puede iniciar una lista o crear una lista con listas anidadas de forma sencilla utilizando el operador *.

listOfNones = [None] * 6

# gives [None, None, None, None, None, None]

listOfFives = [[5]] *5

# gives [[5], [5], [5], [5], [5]]

También hay formas Pythonic de filtrar una lista. Supongamos que desea revisar una lista y eliminar algunos elementos en función de alguna condición. No puede usar el método de eliminación para eliminar los elementos porque eso puede causar errores muy sutiles. Tampoco puede iterar la lista dos veces porque sería ineficiente. En su lugar, puede usar la comprensión de listas o los generadores para lograr los mismos resultados de manera más eficiente y pythonicamente.

# comprehensions create a new list

filtered_list = [item for item in sequence if item != x]

# to avoid generating a new object, use generators

filtered_list = (item for item in sequence if item != x)

Relacionado: Cómo agregar listas en Python

4. Divertirse con las funciones

Todo en Python es un objeto, incluidas las funciones. Las funciones son una forma eficiente de empaquetar una parte del código que puede usar repetidamente en sus códigos actuales o futuros. En Python, hay cuatro formas diferentes de pasar argumentos a una función.

Cómo pasar argumentos a una función en Python

  1. Argumentos posicionales : estos argumentos son partes del significado de la función. Aparecen en el orden en que fueron escritos en la definición de función original. Por ejemplo, send_email(título, destinatario, cuerpo) .
  2. Argumentos de palabras clave : también conocidos como kwargs , son útiles cuando se trata de una función que tiene muchos argumentos. En ese caso, los kwargs se pueden usar con valores predeterminados. Por ejemplo, enviar_mensaje(mensaje, destinatario, cc=Ninguno) .
  3. Tupla de argumentos arbitrarios : si su función necesita un número indefinido de argumentos, puede usar la construcción *args para pasar una tupla de argumentos a la función. Por ejemplo, def calc_ave(*nums) . Los números serán una tupla con tantos valores como el usuario quiera.
  4. Diccionario de argumentos de palabras clave arbitrarias : similar a la tupla de argumentos arbitrarios, si una función requiere un número indeterminado de argumentos con nombre, puede usar la construcción **kwargs .

Las dos últimas técnicas son muy poderosas, así que ten cuidado al usarlas y hazlo solo cuando lo creas necesario. Si hay una mejor manera de escribir la función sin esos métodos, absténgase de usarlos.

Otra forma de escribir más funciones Pythonic es tener solo una declaración de retorno. A medida que sus funciones crezcan, es posible que se encuentre usando múltiples declaraciones de retorno dentro de ellas. Dicho esto, tener múltiples devoluciones solo hará que sus funciones sean difíciles de leer y modificar.

5. Sigue el Zen de Python

Finalmente, si desea aprender a escribir un buen código Python o código Pythonic, todo lo que necesita hacer es seguir el Zen de Python. El Zen de Python es una guía sencilla para escribir código Python, también conocida como PEP 20. Puede leer el Zen de Python simplemente ejecutando importar este comando.

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Si desea ver ejemplos concretos del uso de Zen of Python, consulte estas diapositivas .

Puede aprender la sintaxis de Python, puede saber cómo escribir cosas en Python y lo que se considera una sintaxis correcta o incorrecta, pero saber eso no le permitirá hablar Python con fluidez.

Me gusta pensar en los lenguajes de programación de la misma manera que pienso en los lenguajes hablados. Algunos suenan difíciles de aprender y perfeccionar, mientras que otros parecen más manejables. Esa percepción depende de varios factores. Si quieres aprender inglés, el grado de dificultad dependerá de tu idioma nativo y de tu capacidad para aprender un nuevo idioma. Entonces, incluso si logras aprender los conceptos básicos del vocabulario y la gramática en inglés, eso no te hace hablar inglés con fluidez. Para ser considerado con fluidez en inglés, debe poder comunicarse de manera efectiva con los demás. En otras palabras, debe dominar los modismos en inglés.

Los lenguajes de programación en general (y Python, en particular) funcionan de la misma manera. Puede aprender la sintaxis de Python, puede saber cómo escribir cosas en Python y lo que se considera una sintaxis correcta o incorrecta, pero saber eso no le permitirá hablar Python con fluidez.

Para tener fluidez en Python, deberá usar expresiones idiomáticas para escribir código Pythonic. La única forma de hacerlo es practicar.