Introducci贸n al estilo de codificaci贸n Python

    Python como lenguaje de programaci贸n es bastante simple y compacto. En comparaci贸n con otros lenguajes, solo tiene un n煤mero relativamente bajo de palabras clave para internalizar para escribir c贸digo Python adecuado. Adem谩s, se prefiere tanto la simplicidad como la legibilidad del c贸digo, que es de lo que se enorgullece Python. Para lograr ambos objetivos, es 煤til que siga las pautas espec铆ficas del idioma.

    Este art铆culo se centra en las pautas mencionadas anteriormente para escribir c贸digo v谩lido que represente una forma de programaci贸n m谩s Pythonic. Es una selecci贸n de pautas que se centra en el uso pr谩ctico.

    Zen de Python

    
        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!
        --Tim Peters
    

    Directrices generales de programaci贸n

    Siguiendo el Zen de Python, la legibilidad del c贸digo cuenta. Para garantizar un c贸digo con el formato adecuado, el lenguaje Python tiene algunas pautas de programaci贸n descritas en PEP8, por ejemplo, sangr铆a consistente, una longitud de l铆nea espec铆fica, escribir una declaraci贸n por l铆nea solamente y formular fragmentos de c贸digo de una manera bastante expl铆cita que impl铆cita. Explicaremos estas reglas a continuaci贸n paso a paso.

    Sangr铆a

    Se requiere sangr铆a para clases, funciones (o m茅todos), bucles, condiciones y listas. Puede usar tabuladores o espacios, pero no debe combinar ambos en el mismo gui贸n. Para Python 3, los espacios son el m茅todo de sangr铆a preferido y, m谩s espec铆ficamente, se desean cuatro espacios. Como ejemplo, se recomienda definir una lista de una de estas dos formas de la siguiente manera:

    Escribir listas

    # version 1
    numbers = [
        1, 2, 3,
        4, 5, 6
        ]
    
    # version 2
    numbers = [
        1, 2, 3,
        4, 5, 6
    ]
    

    Como se se帽al贸 en PEP8, el corchete de cierre puede alinearse debajo del primer car谩cter que no sea un espacio en blanco de la 煤ltima l铆nea de la lista, como en la “versi贸n 1”, o debajo del primer car谩cter de la l铆nea que comienza la lista como en “versi贸n 2”.

    El uso de espacios requiere que trabajemos con la misma cantidad de espacios por nivel de sangr铆a. El siguiente ejemplo le muestra c贸mo no para escribir su c贸digo, que mezcla tabuladores y un n煤mero diferente de espacios en cada l铆nea.

    Mal ejemplo

    def draw_point(x, y):
      """draws a point at position x,y"""
        
    	if (x > 0):
    	  set_point(x, y)
      return
    

    Para sangrar bloques de c贸digo correctamente, el siguiente ejemplo utiliza cuatro espacios por nivel de sangr铆a, en consecuencia:

    Buen ejemplo

    def draw_point(x, y):
        """draws a point at position x,y"""
    
        if (x > 0):
            set_point(x, y)
        return
    

    Un estado de cuenta por l铆nea

    El ejemplo anterior sigue otra regla importante con respecto a la escritura de c贸digo: use solo una declaraci贸n por l铆nea. Aunque, el lenguaje Python le permite escribir varias declaraciones por l铆nea que est谩n separadas por un punto y coma de la siguiente manera:

    Malo

    print ("Berlin"); print ("Cape Town")
    
    if x == 1: print ("Amsterdam")
    

    Para mayor claridad, escriba el c贸digo as铆, en su lugar:

    Bueno

    print ("Berlin")
    print ("Cape Town")
    
    if x == 1:
        print ("Amsterdam")
    

    Esto tambi茅n se refiere al uso de m贸dulos de Python. Muchos ejemplos de programaci贸n muestran dos o m谩s m贸dulos que se importan en una sola l铆nea de la siguiente manera:

    Mala pr谩ctica

    import sys, os
    

    Es mucho mejor importar un m贸dulo por l铆nea, en su lugar:

    Buena pr谩ctica

    import sys
    import os
    

    Colocar el import declaraciones al principio del archivo, despu茅s de la informaci贸n de copyright y las cadenas de documentaci贸n. Adem谩s, es com煤n agrupar las import declaraciones en m贸dulos est谩ndar de la biblioteca de Python, m贸dulos de terceros relacionados y, finalmente, importaciones espec铆ficas de la biblioteca. Insertar una l铆nea en blanco y comentarios ayudan a la legibilidad y a comprender mejor el c贸digo.

    Importaci贸n de m贸dulos externos

    # use operating-system specific routines
    import os
    
    # use regular expressions routines
    import re
    
    # use SAX XML library/parser
    from xml.sax import make_parser, handler
    ...
    

    Longitud de la l铆nea

    Una sola l铆nea no debe exceder la cantidad de 79 caracteres, mientras que una cadena de documentos o un comentario no debe tener m谩s de 72 caracteres. Las l铆neas de c贸digo se pueden ajustar usando una barra invertida () como sigue:

    C贸digo con salto de l铆nea

    with open('/path/to/some/file/you/want/to/read') as file_1, 
         open('/path/to/some/file/being/written', 'w') as file_2:
        file_2.write(file_1.read())
    

    C贸digo expl铆cito vs impl铆cito

    Python como lenguaje de secuencias de comandos es lo suficientemente flexible como para permitirle utilizar “trucos” en todo el c贸digo. Aunque debes tener en cuenta que muchas veces tu c贸digo es le铆do por otros desarrolladores. Para mejorar la legibilidad, es mejor escribir c贸digo expl铆cito en lugar de hacer suposiciones impl铆citas, como usar frases breves o “trucos”.

    En el siguiente ejemplo, la funci贸n calculation() oculta los dos valores x y y en un solo par谩metro llamado args. Esta forma de escritura tambi茅n permite a las personas que llaman pasar m谩s o menos que estos valores a la funci贸n si lo desean, pero no es obvio a primera vista.

    Malo

    def calculation(*args):
        """calculation of the total"""
    
        x, y = args
        return (x+y)
    
    print(calculation(3, 4))
    

    Para mayor claridad, se recomienda escribirlo as铆, en su lugar:

    Bueno

    def calculation(x,y):
        """calculation of the total"""
    
        total = x + y
        return (total)
    
    print(calculation(3, 4))
    

    Convenciones de nombres

    Existen bastantes variaciones para nombrar m贸dulos, clases, m茅todos / funciones y variables. Esto incluye el uso de letras min煤sculas y may煤sculas con o sin guiones bajos, palabras en may煤scula y estilos mixtos. Debido a la gran diversidad de desarrolladores, encontrar谩 todos estos estilos y hay poca coherencia entre los m贸dulos.

    Variaciones de estilo de nomenclatura

    shoppingcart = []  # lowercase
    shopping_cart = [] # lowercase with underscores
    SHOPPINGCART = []  # uppercase
    SHOPPING_CART = [] # uppercase with underscores
    ShoppingCart = []  # capitalized words
    shoppingCart = []  # mixed style
    

    Depende de usted cu谩l de los estilos utilice. Nuevamente, sea consistente y use el mismo estilo en todo su c贸digo. Seg煤n PEP8, se aplican las siguientes reglas principales:

    • Los nombres de los identificadores deben ser compatibles con ASCII
    • Se requiere que los m贸dulos tengan nombres cortos en min煤sculas
    • Las clases siguen la convenci贸n de palabras en may煤scula
    • Las excepciones siguen la convenci贸n de palabras en may煤scula y se espera que tengan la Error sufijo si se refieren a errores
    • Las constantes se escriben en may煤sculas

    Para obtener m谩s detalles, consulte el est谩ndar PEP8.

    Tambi茅n debemos se帽alar que se considera m谩s “Pythonic” usar el enfoque de “min煤sculas con guiones bajos” al nombrar variables en Python, aunque se permite cualquier enfoque.

    Validaci贸n de estilo de c贸digo

    Las pautas son excelentes para lograr un c贸digo que siga ciertas condiciones. Como programador, debe asegurarse de seguirlos tanto como sea posible. Las herramientas automatizadas son excelentes para ayudarlo a validar su c贸digo.

    Como se mencion贸 anteriormente, las pautas se describen en PEP8. En consecuencia, el lenguaje Python contiene una herramienta de l铆nea de comandos correspondiente para ayudarlo a verificar su c贸digo seg煤n las pautas. Originalmente conocido como pep8, se cambi贸 el nombre de este verificador de c贸digo a pycodestyle en 2016. Es mantenido por la Autoridad de Calidad del C贸digo de Python y pertenece a una serie de herramientas como los analizadores de c贸digo fuente pil贸n y copos, el verificador de complejidad McCbe as铆 como el verificador de cadenas de documentos pydocstyle.

    pycodestyle analiza su c贸digo Python e informa violaciones que cubren errores de sangr铆a, l铆neas en blanco innecesarias y el uso de tabuladores en lugar de espacios. El siguiente ejemplo contiene una salida de muestra con algunos errores y advertencias t铆picos:

    $ pycodestyle --first stack.py
    stack.py:3:1: E265 block comment should start with "https://Pharos.sh.com/introduction-to-the-python-coding-style/#"
    stack.py:12:1: E302 expected 2 blank lines, found 1
    stack.py:13:1: W191 indentation contains tabs
    

    En Debian GNU / Linux, la herramienta est谩 disponible como paquetes python-pycodestyle (para Python 2.x) y python3-pycodestyle (para Python 3.x). Ambos vienen con una serie de par谩metros 煤tiles, por ejemplo:

    • --first: Muestra la primera aparici贸n de cada error (como se ve arriba). La salida muestra el archivo en el que se detect贸 el error, as铆 como el n煤mero de l铆nea y la columna.
    • --show-source: Muestra el c贸digo fuente de cada error
    $ pycodestyle --show-source stack.py
    stack.py:3:1: E265 block comment should start with "https://Pharos.sh.com/introduction-to-the-python-coding-style/#"
    #o
    ^
    stack.py:12:1: E302 expected 2 blank lines, found 1
    class Stack:
    ^
    stack.py:13:1: W191 indentation contains tabs
        def __init__(self):
    ^
    ...
    
    • --statistics: Cuente errores y advertencias. En el siguiente ejemplo, pycodestyle detect贸 dos errores, E265 y E302, as铆 como 30 advertencias (W191).
    $ pycodestyle --statistics stack.py
    ...
    1       E265 block comment should start with "https://Pharos.sh.com/introduction-to-the-python-coding-style/#"
    1       E302 expected 2 blank lines, found 1
    30      W191 indentation contains tabs
    

    La misma herramienta tambi茅n es disponible en linea. Simplemente copie y pegue su c贸digo en la herramienta y vea el resultado de la validaci贸n.

    Conclusi贸n

    Escribir c贸digo Python adecuado no siempre es f谩cil. Pero, afortunadamente, existen pautas que ayudan, as铆 como herramientas de l铆nea de comandos para garantizar que su c贸digo cumpla con estas pautas. Con los diversos recursos disponibles, puede ser muy f谩cil 馃檪

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *