Guía de estilos¶
Las guías de estilo ayudan a los equipos de desarrollo a escribir código consistente simplificando su entendimiento a todos/as los/as miembros del equipo.
Python define en PEP8 como guía de estilos base y en PEP257 la convención para Docstrings. Teniendo esta referencia vamos a mencionar las normas mas importantes que esperamos que traten de cumplir en el trabajo.
Antes de comenzar a nombrarlas es necesario decir de una regla base a todas las siguientes a la hora de desarrollar una aplicación en equipo: ser consistentes. ¿Qué quiere decir esto? que todos los miembros sigan las mismas reglas para el estilo de escritura del código.
Generales¶
- Uso de 4 espacios en lugar de tabs. Esto puede ser configurado en su editor
- 120 es el máximo de caracteres por línea. Preferentemente 80
- Dejar 2 líneas en blanco entre clases y funciones
- 1 línea en blanco dentro de la clases entre los métodos de la misma
- No dejar líneas en blanco luego de la línea
def
- No dejar espacios dentro de los paréntesis, corchetes y las llaves
- Rodear los operadores con un espacio en blanco de ambos lados
- No usar espacios en blanco alrededor del
=
cuando se pasa unkeyword argument
o se define un valor por defecto en una función
# bien
def function_name(keyword_argument=value):
pass
function_name(keyword_argument=1)
# mal
def function_name(keyword_argument = value):
pass
function_name(keyword_argument = 1)
- Usar líneas en blanco para la separación de lógica dentro de las funciones/métodos siempre que esté justificado
- Mover los argumentos de una función de una nueva línea con indentación si no entran todos en la primer línea
# bien
def long_function_name(var_one, var_two, var_three,
var_four):
print(var_one)
# bien
def long_function_name(
var_one,
var_two,
var_three,
var_four
):
print(var_one)
- Mover las condiciones a nuevas líneas si no entran en el máximo determinado. Esto te ayudará a entender la condición mirando de arriba hacia abajo.
# bien
if (this_is_one_thing
and that_is_another_thing
or that_is_third_thing
or that_is_yet_another_thing
and one_more_thing
):
do_something()
- Usar Strings multilíneas sin
\\
.
- Use argumentos nombrados para aumentar la legibilidad.
# bien
urlget('[http://google.com](http://google.com/)', timeout=20)
# mal
urlget('[http://google.com](http://google.com/)', 20)
- Nunca termines tus líneas con punto y coma y no las uses para tener dos sentencias en la misma línea.
- El encadenamiento de métodos debe ser separado en múltiples líneas para mejor legibilidad
(df.write \
.format('jdbc')
.option('url', 'jdbc:postgresql:dbserver')
.option('dbtable', 'schema.tablename')
.option('user', 'username')
.option('password', 'password')
.save()
)
- Siempre comience el bloque de código en una nueva línea
- Separa el símbolo
#
del contenido del comentario con un espacio en blanco
Nombres¶
- Usar
snake_case
para módulos, variables, atributos, funciones y nombre de métodos. NO USARCamelCase
. - Usar
CamelCase
para el nombre de las clases. - Los nombres deben referirse a lo que hace o contiene la variable, clase o función.
- No incluya el tipo de la variable en su nombre. Ej: use
personas
en lugar delista_personas
.
Docstrings¶
-
Escriba los docstrings contenidos con triple comillas dobles
"""
-
Escriba los docstrings para métodos que no sean tan simples. En los mismos resuma descripción de comportamiento, argumentos, valores de retorno, excepciones que se pueden lanzar
def some_method(name, state=None):
"""This function does something
:param name: The name to use
:type name: string
:param state: Current state to be in (optional, default: None)
:type state: bool
:returns: int -- the return code
:raises: AttributeError, KeyError
"""
...
return 0
Imports¶
- Evite los import relativos utilice import absolutos
- Nunca use
*
en los imports. Siempre sea explícito sobre lo que va a importar - Los imports deben escribirse en el siguiente orden separados por una línea:
- Módulos build-in (que vienen con Python)
- Módulos third-party (paquetes externos que instaló)
- Módulos del proyecto actual
Malas ideas¶
- Variables globales
- Usar lambdas donde no se requiere
- Usar funciones embebidas