Una breve introducción al estilo de codificación de Python
Cuando decidí hace un par de días comenzar a escribir sobre Python, no estaba seguro de cuál sería mi primer tema. Principalmente porque nunca he escrito ningún artículo en mi vida antes, y es bastante intimidante. Entonces pensé: "Está bien, comenzaré con algo corto y simple para mojarme los pies", así que aquí estamos.
Echaremos un vistazo rápido a algunas de las pautas de estilo de codificación para Python que nos ayudarán a escribir un código claro, consistente y fácil de ver.
¡Vamos a sumergirnos!
Tabla de contenido
- Introducción
- Convenciones de nombres
- ¿Al espacio en blanco o no al espacio en blanco?
- Reglas generales
- No haga todo usted mismo
Lo más probable es que ya haya oído hablar de PEP , pero en caso de que no lo haya hecho, aquí está la definición formal:
PEP significa Propuesta de mejora de Python. Un PEP es un documento de diseño que brinda información a la comunidad de Python o describe una nueva función para Python o sus procesos o entorno.
Hay una gran lista de PEP que abordan diferentes temas relacionados con Python, pero nos centraremos solo en PEP 8 , que es la guía en lo que respecta a las convenciones de estilo de codificación de Python. Su objetivo es hacer que el código sea más legible y coherente mediante la definición de un conjunto de pautas para las convenciones de nomenclatura, el uso de tabulaciones frente a espacios, la longitud máxima de línea, etc. Sin embargo, tenga en cuenta
que esas no son reglas, a veces tiene sentido no seguir una pauta en particular, consulte algunos ejemplos aquí: A Foolish Consistency is the Hobgoblin of Little Minds
Convenciones de nombres
Comencemos mirando un ejemplo simple. ¿Qué opinas de estas dos funciones?
def sumEvenNumbers(numbers):
even_sum = 0
for ListNumber in numbers:
if ListNumber % 2 == 0:
even_sum += ListNumber
return even_sum
def sum_odd_nums(nums):
OddSum = 0
for n in nums:
if n% 2 == 0:
OddSum+= n
return OddSum
Ahora podrías pensar: “Bueno, Ahmed, ¿y qué? ¿Es realmente tan importante? Yo diría que sí lo es, por algunas razones:
- A menudo leemos código más de lo que lo escribimos, por lo que es importante mantenerlo limpio y fácilmente comprensible.
- Es una cosa menos de la que preocuparse al crear una nueva variable/función/clase, porque ya sabe cómo debería verse y solo necesita encontrar un nombre descriptivo (no sé ustedes, pero a veces esto me lleva un poco)
- Facilita la escritura de análisis estáticos o scripts de automatización cuando los patrones de nomenclatura son los mismos en todas partes.
¡Entra PEP 8!
Proporciona una guía para los estándares de nomenclatura recomendados para variables, clases, funciones y otros. Éstos son algunos de ellos:
- Clases: use el estilo CamelCase (por ejemplo
class InputManager, ) - Funciones y variables: use el estilo snake_case
def sum_even_numbers(numbers)(por ejemplo , osum_even = 0) - Métodos: igual que las funciones, y en caso de que sea un método no público, use un guión bajo inicial (por ejemplo,
def _calculate_intermediate_sum(self)) - Constantes: use todas las letras mayúsculas con guiones bajos para separar palabras (por ejemplo,
MAX_WIDTH = 10)
Nuestro próximo orden del día es el uso de espacios en blanco. Este es puramente estético.
Al espacio en blanco:
- Un solo espacio a cada lado de los operadores binarios (
=,+=,-=,>,>=,<,<=,==, etc.) (p. ej.sum += 5) - Un solo espacio después de la(s) coma(s) en tuplas/listas (p. ej.
ages = [12, 13, 14],coordinates = (4, 3)) - En las funciones, escriba sugerencias: un solo espacio después de los dos puntos y rodee
->con un espacio a cada lado (por ejemplodef sum_even(nums: List) -> int:, ) - Cuando se usa un valor predeterminado en combinación con una sugerencia de tipo en una firma de función, use espacios en blanco alrededor de
=(p. ej.def draw(scale: int = 1) -> None:)
(no sabía eso antes de investigar para este artículo)
- No agregue espacios adicionales para alinear operadores
- Antes de la(s) coma(s) en tuplas/listas
- Inmediatamente dentro de paréntesis, corchetes o llaves
- Evite los espacios en blanco finales
# Good
age = 20
social_security_number = 1111
info[0] = (names[0], {'address': 'somewhere'})
heights = [180, 178, 195]
# Bad
age = 20
social_security_number = 1111
info[ 0] = ( names[ 0 ], { 'address': 'somewhere' } )
heights = [180 , 178 , 195]
Hay muchas otras pautas de las que me gustaría hablar, pero para abreviar, les dejaré algunas sugerencias rápidas (la descripción más detallada se puede encontrar en la documentación de PEP 8 ) :
- Las importaciones deben hacerse en líneas separadas
- Use espacios en lugar de tabulaciones (excepto cuando las tabulaciones ya se están usando en su base de código, ya que Python no permite mezclar espacios y tabulaciones)
- La longitud de línea máxima recomendada es de 79 caracteres para el código y 72 caracteres para comentarios o cadenas de documentos.
- Use 4 espacios por nivel de sangría
Todos necesitamos ayuda de vez en cuando, y cuando se trata de seguir los estándares que hemos discutido, su biblioteca de referencia es autopep8. Esta herramienta formatea automáticamente su código Python para cumplir con la guía de estilo PEP 8, también puede especificar el nivel de agresividad y si debe ignorar algunas reglas al formatear (Reglas arregladas por autopep8 )
Para instalarlo:
pip install autopep8
Y usarlo es igual de simple:
autopep8 --in-place --aggressive <filename>
Si está desarrollando en Visual Studio Code, le recomiendo usar la función de formato automático en la extensión de Python, donde se ejecuta autopep8en un archivo cuando lo guarda.
Solo necesita agregar algunas líneas a su archivo VSCode settings.json. Aquí hay un fragmento de la configuración que uso:
"python.formatting.autopep8Args": [
"--max-line-length=79",
"--ignore",
"E402"
],
"editor.formatOnSave": true,
¡Hasta la próxima!
Referencias
- https://peps.python.org/pep-0000/
- https://peps.python.org/pep-0001/
- https://peps.python.org/pep-0008
- https://docs.python-guide.org/writing/style
- https://pypi.org/project/autopep8/
- Consulte las convenciones de Docsring:https://peps.python.org/pep-0257

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































