PEP 8
Guía de Estilo para código Python
Andrés Chávez
¿Qué es PEP 8?
¿Y por qué 8? Existen muchos PEPs o "Propuestas de Mejora de Python" (Python Enhancement Proposals), el PEP 8 es la propuesta del estándar de programación y buenas prácticas para el lenguaje.
En general, es una guía para mejorar la legibilidad del código y hacerlo más consistente.
Altamente recomendado como primera lectura de todo Pythonista, sea neófito o profesional.
Una mala consistencia es el "duende" de las mentes pequeñas
Una de las ideas clave de Guido es que se lee el código mucho más seguido de lo que se escribe.
Una guía de estilo es una cuestión de consistencia. La consistencia dentro de un proyecto es más importante.
Pero lo más importante: saber cuándo ser inconsistente
Algunas buenas razones para romper una regla en particular
- Cuando el aplicar la regla hace el código menos legible, incluso para alguien que está acostumbrado a leer códigos.
- Para ser consistente con otro código que también la rompe (tal vez por razones históricas) – aunque esto podría ser una oportunidad para limpiar el “desastre” de otra persona.
¿Por qué es importante adoptar un estilo?
- Es posible que el código deba ser mantenido o refactorizado.
- En caso de que sea uno mismo el "culpable", no siempre recordaremos que hacia tal o cual función. El solo hecho de seguir un estilo y haber sido consistentes puede ayudar en gran medida.
- Al trabajar en equipo esto se hace mucho más notorio. Si todos los miembros siguen la misma guía, aunque no sepamos para que sirve, al seguir un estilo, el proyecto se hace legible y permite que el "dolor" al revisarlo sea menor.

Usa 4 espacios por identación
Las siguientes lineas deben alinearse verticalmente con el carácter que se ha utilizado (paréntesis, llaves, corchetes) o haciendo uso de la “hanging indent” (aplicar tabulaciones en todas las líneas con excepción de la primera).
Al utilizar este último método, no debe haber argumentos en la primera línea, y más tabulación debe utilizarse para que la actual se entienda como una línea de continuación.
Si:
# Alineado con el paréntesis que abre la función
foo = long_function_name(var_one, var_two,
var_three, var_four)
# Más indentación para distinguirla del resto de las líneas
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# Argumentos en la primera línea cuando no se estáhaciendo uso de la alineación vertical
foo = long_function_name(var_one, var_two,
var_three, var_four)
# La línea de continuación no se distingue del contenido de la función
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
No:
El paréntesis / corchete / llave que cierre una asignación debe estar alineado con el primer carácter que no sea un espacio en blanco:
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)
O puede ser alineado con el carácter inicial de la primera línea:
¿Tabulaciones o espacios?
Nunca mezcles tabulaciones y espacios. El método de indentación más popular en Python son los espacios.
Cualquier código indentado con una mezcla de espacios y tabulaciones debe ser convertido a espacios exclusivamente.
Cuando se invoca la línea de comando intérprete de Python 2 con la opción '-t', se emiten advertencias sobre código que mezcla ilegalmente tabulaciones y espacios. Al usar '-tt' estas advertencias se convierten en errores. Estas opciones son muy recomendables!
Máxima longitud de las líneas
Limita todas las líneas a un máximo de 79 caracteres.
Limitar el ancho de la ventana editor requerido hace que sea posible tener varios archivos de lado a lado abierto, y funciona bien cuando se utilizan herramientas de revisión de código que presentan las dos versiones en columnas adyacentes.
La forma preferida de envolver largas filas es mediante el uso de continuación de línea implícita de Python dentro de paréntesis, corchetes y llaves. Las barras invertidas todavía pueden ser apropiados en algunas ocasiones.
Líneas en blanco
Separa funciones de alto nivel y definiciones de clase con dos líneas en blanco.
Definiciones de métodos dentro de una clase son separadas por una línea en blanco.
Líneas en blanco adicionales pueden ser utilizadas (escasamente) para separar grupos de funciones relacionadas.
Usa líneas en blanco en funciones, escasamente, para indicar secciones lógicas.
Importaciones
Las importaciones deben estar en líneas separadas
#Sí
import os
import sys
#No
import sys, os
Sin embargo, es correcto:
from subprocess import Popen, PIPE
Las importaciones siempre se colocan al comienzo del archivo, simplemente luego de cualquier comentario o documentación del módulo, y antes de globales y constantes.
Espacios en blanco
Evita usar espacios en blanco extraños en las siguientes situaciones:
Inmediatamente dentro de paréntesis, corchetes o llaves:
#Sí
spam(ham[1], {eggs: 2})
#No
spam( ham[ 1 ], { eggs: 2 } )
Inmediatamente antes de una coma, un punto y coma o dos puntos:
#Sí
if x == 4: print x, y; x, y = y, x
#No
if x == 4 : print x , y ; x , y = y , x
Entre otros ...
Otras recomendaciones
- Siempre rodea estos operadores binarios con un espacio en cada lado: asignación (=), asignación de aumentación (+=, -=, etc.), comparaciones (==, <, >, !=, <>, <=, >=, in, not in, is, is not), “Booleans” (and, or, not).
- No uses espacios alrededor del = (igual) cuando es utilizado para indicar un argumento en una función (“keyword argument”) o un parámetro con un valor por defecto.
- Las sentencias compuestas (múltiples sentencias en la misma línea) son generalmente desalentadas (poco recomendadas).
La Guía
http://www.recursospython.com/pep8es.pdf
Gracias
Guía de Estilo para código Python - PEP 8
By Andrés Chávez U.
Guía de Estilo para código Python - PEP 8
- 809