Skip to content

Instantly share code, notes, and snippets.

@hchocobar
Last active April 3, 2024 08:58
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hchocobar/91f9e33a0201f3f8d0eb468a00612cc2 to your computer and use it in GitHub Desktop.
Save hchocobar/91f9e33a0201f3f8d0eb468a00612cc2 to your computer and use it in GitHub Desktop.
Python - PEP 8: Style Guide for Python Code

PEPs - Python Enhancement Proposals

Propuesta de mejora de Python, del inglés Python Enhancement Proposal.

Los PEPs tienen como propósito ser los mecanismos primarios para proponer nuevas y mayores capacidades, para recoger la opinión de la comunidad sobre un tema, y para documentar las decisiones de diseño que se han hecho en Python.

Si deseas ver el listado completo de los PEPs puedes econtrarlo en el listado oficial de PEPs

Si estás dando tus primeos pasos en Python, hay algunas que debes conocer, si o sí, y aplicarlas: ellas son la PEP8 y la PEP20.

PEP 8: Style Guide for Python Code

En Python la legibilidad es tan importante que existe una PEP para ello: la PEP8 https://www.python.org/dev/peps/pep-0008/

A continuación un listado de algunos ejemplos (no todos):

PEP 8: variables

Utilizar nombres descriptivos y en minúsculas. Para nombres compuestos, separar las palabras por guiones bajos.

mi_variable = 12

element = '<tag></tag>'

Incorrectos:

miVariable = 12  # Incorrecto
mivariable = 12  # Incorrecto
mi-variable = 12  # Incorrecto

elem = '<tag></tag>'  # Incorrecto

PEP 8: constantes

Utilizar nombres descriptivos y en mayúsculas separando palabras por guiones bajos.

MI_CONSTANTE = 12

PEP 8: clases

Utilizar CapitalizedWords (CapWords o CamelCase) y siempre con nombres descriptivos.

class TestClass:

PEP 8: operadores

Siempre colocar un espacio en blanco, antes y después de un operador

monto_bruto = 175
tasa_interes = 12
monto_interes = monto_bruto * tasa_interes / 100
tasa_bonificacion = 5
importe_bonificacion = monto_bruto * tasa_bonificacion / 100
monto_neto = (monto_bruto - importe_bonificacion) + monto_interes

PEP 8: comentarios

Los comentarios en la misma línea del código deben separarse con dos espacios en blanco. Luego del símbolo # debes agregar un solo espacio en blanco e iniciar con la primera letra en mayúscula.

first_name = 'Joe'  # Nombre
last_name = 'Doe'  # Apellido
age = 25  # Edad

PEP 8: indentación

La indentación es muy importante en Python porque indica que las instrucciones forman parte de una misma estructura de control o bloque.

La indentación en Python debe ser de 4 (cuatro) espacios en blanco.

numero = 50
if numero < 100:
    print('Hola')
elif numero < 200:
    print('Chao')
else:
    print('Adiós')

user = ''
for char in 'john.smith@pythoninstitute.org':
    if char == '@':
        break
    user += char
print(user)  # Salida: 'john.smith'

Indentación en la definición de colecciones largas:

# Listas
ordinales = ['primero', 'segundo', 'tercero', 'cuarto', 'quinto', 
             'sexto', 'séptimo', 'octavo', 'noveno', 'décimo'] 


# Tuplas
dias = ('lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo')
meses = ('enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 
         'julio', 'agosto', 'setiembre', 'octubre', 'noviembre', 'diciembre')


# Diccionarios
usuario = {'nombre': 'Jane Doe',
           'edad': 23,
           'curso': 'Curso de Python',
           'skills': {'programación': True,
                      'base_de_datos': False},
           'niveles': ['básico', 'intermedio']}

PEP 8: Líneas en blanco

Las funciones y clases de nivel superior están separadas por dos líneas.

Las definiciones de métodos dentro de una clase están separadas por una sola línea en blanco.

Todo lo demás por una.

Se pueden usar líneas en blanco adicionales (con moderación) para separar grupos de funciones relacionadas. No utilice demasiadas líneas en blanco para separar segmentos lógicos en el código.

import so
import sys
from flask import Flask


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass

PEP 20: The Zen of Python

El Zen de Python, escrito por Tim Peters en el año 2004, describe los principios rectores para el diseño de Python.

Puedes importarlo en tu código utlizando la siguiente instrucción.

import this

Transcribo a continuación su contenido para que puedas leerlo y luego aplicarlo.

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment