Documentacion PDF
Documentacion PDF
Documentacion PDF
Este documento y PEP 257 (Convenciones de cadenas de documentos) fueron adaptados del
ensayo original de la Guía de estilo Python de Guido, con algunas adiciones de la guía de
estilo de Barry [2] .
Esta guía de estilo evoluciona con el tiempo a medida que se identifican convenciones
adicionales y las convenciones pasadas se vuelven obsoletas debido a cambios en el propio
lenguaje.
Muchos proyectos tienen sus propias pautas de estilo de codificación. En caso de conflicto,
dichas guías específicas del proyecto tienen prioridad para ese proyecto.
Una guía de estilo tiene que ver con la coherencia. La coherencia con esta guía de estilo es
importante. La coherencia dentro de un proyecto es más importante. La coherencia dentro
de un módulo o función es lo más importante.
Sin embargo, debes saber cuándo ser inconsistente: a veces, las recomendaciones de la guía
de estilo simplemente no son aplicables. En caso de duda, utilice su mejor criterio. Mire
otros ejemplos y decida qué se ve mejor. ¡Y no dudes en preguntar!
En particular: ¡no rompa la compatibilidad con versiones anteriores solo para cumplir con
este PEP!
1. Al aplicar la directriz, el código sería menos legible, incluso para alguien que esté
acostumbrado a leer el código que sigue este PEP.
2. Para ser coherente con el código circundante que también lo rompe (quizás por razones
históricas), aunque esta también es una oportunidad para limpiar el desorden de otra
persona (en el verdadero estilo XP).
3. Porque el código en cuestión es anterior a la introducción de la directriz y no hay otra
razón para modificar ese código.
4. Cuando el código debe seguir siendo compatible con versiones anteriores de Python que
no son compatibles con la función recomendada por la guía de estilo.
Diseño de código
Sangría
Utilice 4 espacios por nivel de sangría.
Las líneas de continuación deben alinear los elementos envueltos ya sea verticalmente
usando la línea implícita de Python que se une entre paréntesis, corchetes y llaves, o usando
una sangría francesa [7] . Cuando se utiliza una sangría francesa, se debe considerar lo
siguiente; no debe haber argumentos en la primera línea y se debe usar más sangría para
distinguirse claramente como una línea de continuación:
# Correcto:
var_three, var_four)
def nombre_función_larga (
var_four):
imprimir (var_one)
foo = nombre_función_larga (
var_one, var_two,
var_three, var_four)
# Equivocado:
# Se prohíben los argumentos en la primera línea cuando no se utiliza la
alineación vertical.
var_three, var_four)
def nombre_función_larga (
var_four):
imprimir (var_one)
Opcional:
# Las sangrías colgantes * pueden * tener sangría diferente a 4
var_one, var_two,
var_three, var_four)
si (this_is_one_thing y
eso_es_otra_cosa):
hacer algo()
si (this_is_one_thing y
eso_es_otra_cosa):
hacer algo()
si (this_is_one_thing
y eso_es_otra_cosa):
hacer algo()
(Consulte también la discusión sobre si romper antes o después de los operadores binarios a
continuación).
my_list = [
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments (
'a B C',
o puede estar alineado bajo el primer carácter de la línea que inicia la construcción
multilínea, como en:
my_list = [
1, 2, 3,
4, 5, 6,
result = some_function_that_takes_arguments (
'a B C',
¿Pestañas o espacios?
Los espacios son el método de sangría preferido.
Las pestañas deben usarse únicamente para mantener la coherencia con el código que ya
está sangrado con pestañas.
El código de Python 2 sangrado con una mezcla de tabulaciones y espacios debe convertirse
para usar espacios exclusivamente.
Algunos equipos prefieren encarecidamente una línea más larga. Para el código mantenido
exclusiva o principalmente por un equipo que puede llegar a un acuerdo sobre este tema,
está bien aumentar el límite de longitud de línea hasta 99 caracteres, siempre que los
comentarios y las cadenas de documentos sigan envueltos en 72 caracteres.
(Consulte la discusión anterior sobre declaraciones if de varias líneas para obtener más
información sobre la sangría de dichas declaraciones multilínea con -información).
ingresos = (salario_bruto +
intereses_impuestos +
(dividendos - dividendos_calificados) -
ira_deduction -
Student_loan_interest)
Para resolver este problema de legibilidad, los matemáticos y sus editores siguen la
convención opuesta. Donald Knuth explica la regla tradicional en su serie Computers and
Typesetting : "Aunque las fórmulas dentro de un párrafo siempre se rompen después de las
operaciones y relaciones binarias, las fórmulas mostradas siempre se rompen antes de las
operaciones binarias" [3] .
Seguir la tradición de las matemáticas generalmente da como resultado un código más
legible:
# Correcto:
ingresos = (salarios_brutos
+ interés_ imponible
+ (dividendos - dividendos_calificados)
- ira_deduction
- interés_préstamo_estudiante)
En el código Python, está permitido romper antes o después de un operador binario, siempre
que la convención sea coherente localmente. Para el nuevo código, se sugiere el estilo de
Knuth.
Líneas en blanco
Rodee las definiciones de clases y funciones de nivel superior con dos líneas en blanco.
Las definiciones de métodos dentro de una clase están rodeadas por una sola línea en
blanco.
Se pueden usar (con moderación) líneas en blanco adicionales para separar grupos de
funciones relacionadas. Se pueden omitir líneas en blanco entre un grupo de frases
ingeniosas relacionadas (por ejemplo, un conjunto de implementaciones ficticias).
Use líneas en blanco en las funciones, con moderación, para indicar secciones lógicas.
Los archivos que usan ASCII (en Python 2) o UTF-8 (en Python 3) no deben tener una
declaración de codificación.
Para Python 3.0 y posteriores, se prescribe la siguiente política para la biblioteca estándar
(ver PEP 3131 ): Todos los identificadores en la biblioteca estándar de Python DEBEN usar
identificadores solo ASCII, y DEBEN usar palabras en inglés siempre que sea posible (en
muchos casos, abreviaturas y se utilizan términos que no son en inglés). Además, los
literales de cadena y los comentarios también deben estar en ASCII. Las únicas excepciones
son (a) casos de prueba que prueban las características no ASCII y (b) nombres de autores.
Los autores cuyos nombres no se basan en el alfabeto latino (latin-1, juego de caracteres
ISO / IEC 8859-1) DEBEN proporcionar una transliteración de sus nombres en este juego
de caracteres.
Se anima a los proyectos de código abierto con una audiencia global a adoptar una política
similar.
Importaciones
▪ Las importaciones generalmente deben estar en líneas separadas:
▪ # Correcto:
▪ # Equivocado:
▪ importar sys, os
▪ Las importaciones siempre se colocan en la parte superior del archivo, justo después de
los comentarios y cadenas de documentación del módulo, y antes de las constantes y
globales del módulo.
Sin embargo, las importaciones relativas explícitas son una alternativa aceptable a las
importaciones absolutas, especialmente cuando se trata de diseños de paquetes
complejos donde el uso de importaciones absolutas sería innecesariamente detallado:
desde . hermano de importación
import foo.bar.yourclass
Al volver a publicar nombres de esta manera, se siguen aplicando las siguientes pautas
con respecto a las interfaces públicas e internas.
"" "
desde __future__ import barry_as_FLUFL
__version__ = '0.1'
importar sys
Cotizaciones de cadena
En Python, las cadenas entre comillas simples y las cadenas entre comillas dobles son
iguales. Este PEP no hace ninguna recomendación al respecto. Elija una regla y apéguese a
ella. Sin embargo, cuando una cadena contiene caracteres de comillas simples o dobles,
utilice la otra para evitar barras invertidas en la cadena. Mejora la legibilidad.
Para cadenas entre comillas triples, utilice siempre comillas dobles para ser coherente con la
convención de cadenas de documentos en PEP 257 .
▪ # Equivocado:
▪ foo = (0,)
▪ # Equivocado:
▪ barra = (0,)
▪ si x == 4: imprimir x, y; x, y = y, x
▪ # Equivocado:
▪ si x == 4: imprimir x, y; x, y = y, x
▪ Sin embargo, en un segmento, los dos puntos actúan como un operador binario y deben
tener cantidades iguales en ambos lados (tratándolo como el operador con la prioridad
más baja). En un corte extendido, ambos dos puntos deben tener la misma cantidad de
espacio aplicado. Excepción: cuando se omite un parámetro de sector, se omite el
espacio:
▪ # Correcto:
▪ jamón [1: 9], jamón [1: 9: 3], jamón [: 9: 3], jamón [1 :: 3], jamón [1:
9:]
Equivocado:
▪ Inmediatamente antes del paréntesis abierto que inicia la lista de argumentos de una
llamada a función:
▪ # Correcto:
▪ spam (1)
▪ # Equivocado:
▪ spam (1)
▪ Inmediatamente antes del paréntesis abierto que inicia una indexación o división:
▪ # Correcto:
▪ # Equivocado:
▪x = 1
▪y = 2
▪ variable_larga = 3
▪ # Equivocado:
▪x = 1
▪y = 2
▪ variable_larga = 3
Otras recomendaciones
▪ Evite dejar espacios en blanco en cualquier lugar. Debido a que generalmente es invisible,
puede resultar confuso: por ejemplo, una barra invertida seguida de un espacio y una
nueva línea no cuenta como un marcador de continuación de línea. Algunos editores no
lo conservan y muchos proyectos (como el propio CPython) tienen ganchos de
confirmación previa que lo rechazan.
▪ Siempre rodear estos operadores binarios con un solo espacio a cada lado: asignación (
= ), la asignación aumentada ( + = , - = , etc.), las comparaciones ( == , < , > , !
= , <> , <= , > = , en , no en , es , no es ), booleanos ( y , o , no ).
▪ Si se utilizan operadores con diferentes prioridades, considere agregar espacios en blanco
alrededor de los operadores con la (s) prioridad (es) más baja (s). Use su propio juicio;
sin embargo, nunca use más de un espacio y siempre tenga la misma cantidad de
espacios en blanco en ambos lados de un operador binario:
▪ # Correcto:
▪ yo = yo + 1
▪ enviado + = 1
▪x = x * 2 - 1
▪ hipot2 = x * x + y * y
▪ c = (a + b) * (ab)
▪ # Equivocado:
▪ yo = yo + 1
▪ enviado + = 1
▪x = x * 2 - 1
▪ hipot2 = x * x + y * y
▪ c = (a + b) * (a - b)
▪ Las anotaciones de funciones deben usar las reglas normales para dos puntos y siempre
deben tener espacios alrededor de la flecha -> si está presente. (Consulte Anotaciones
de funciones a continuación para obtener más información sobre las anotaciones de
funciones):
▪ # Correcto:
▪ No use espacios alrededor del signo = cuando se usa para indicar un argumento de
palabra clave, o cuando se usa para indicar un valor predeterminado para un parámetro
de función no anotado :
▪ # Correcto:
▪ # Equivocado:
... # Equivocado:
▪ # Correcto:
▪ si foo == 'blah':
▪ hacer_blah_thing ()
▪ has uno()
▪ do_two ()
▪ do_three ()
Mejor no:
# Equivocado:
▪ Si bien a veces está bien poner un if / for / while con un cuerpo pequeño en la misma
línea, nunca haga esto para declaraciones de múltiples cláusulas. ¡También evite doblar
líneas tan largas!
Mejor no:
# Equivocado:
Definitivamente no:
# Equivocado:
más: do_non_blah_thing ()
intenta algo()
finalmente: limpieza ()
ARCHIVOS = ('setup.cfg',)
# Equivocado:
ARCHIVOS = 'setup.cfg',
Cuando las comas finales son redundantes, a menudo son útiles cuando se utiliza un sistema
de control de versiones, cuando se espera que una lista de valores, argumentos o elementos
importados se amplíe con el tiempo. El patrón es poner cada valor (etc.) en una línea por sí
mismo, siempre agregando una coma al final, y agregar el paréntesis / corchete / llave de
cierre en la siguiente línea. Sin embargo, no tiene sentido tener una coma al final en la
misma línea que el delimitador de cierre (excepto en el caso anterior de tuplas singleton):
# Correcto:
ARCHIVOS = [
'setup.cfg',
'tox.ini',
inicializar (ARCHIVOS,
error = Verdadero,
# Equivocado:
Comentarios
Los comentarios que contradicen el código son peores que ningún comentario. ¡Siempre
tenga la prioridad de mantener los comentarios actualizados cuando cambie el código!
Los comentarios deben ser oraciones completas. La primera palabra debe escribirse en
mayúscula, a menos que sea un identificador que comience con una letra minúscula (¡nunca
altere el caso de los identificadores!).
Debe utilizar dos espacios después de un período de finalización de una oración en los
comentarios de varias oraciones, excepto después de la oración final.
Asegúrese de que sus comentarios sean claros y fácilmente comprensibles para otros
hablantes del idioma en el que está escribiendo.
Codificadores de Python de países que no hablan inglés: escriba sus comentarios en inglés,
a menos que esté 120% seguro de que el código nunca será leído por personas que no
hablen su idioma.
Bloquear comentarios
Los comentarios de bloque generalmente se aplican a algunos (o todos) códigos que los
siguen, y están sangrados al mismo nivel que ese código. Cada línea de un comentario de
bloque comienza con un # y un solo espacio (a menos que sea texto sangrado dentro del
comentario).
Los párrafos dentro de un comentario de bloque están separados por una línea que contiene
un solo # .
Comentarios en línea
Utilice los comentarios en línea con moderación.
Los comentarios en línea son innecesarios y de hecho distraen si dicen lo obvio. No hagas
esto:
x = x + 1 # Incremento x
▪ Escriba cadenas de documentación para todos los módulos, funciones, clases y métodos
públicos. Las cadenas de documentos no son necesarias para los métodos no públicos,
pero debe tener un comentario que describa lo que hace el método. Este comentario
debería aparecer después de la línea def .
▪ PEP 257 describe buenas convenciones de cadenas de documentos. Tenga en cuenta que
lo más importante es que el "" " que termina una cadena de documentos de varias
líneas debe estar en una línea por sí mismo:
▪ "" "Devolver un foobang
▪ "" "
▪ Para cadenas de documentos de una línea, mantenga el "" "de cierre en la misma línea:
▪ "" "Devuelve un ex-loro." ""
Convenciones de nombres
Las convenciones de nomenclatura de la biblioteca de Python son un poco desordenadas,
por lo que nunca obtendremos esto completamente consistente; sin embargo, aquí están los
estándares de nomenclatura recomendados actualmente. Los nuevos módulos y paquetes
(incluidos los marcos de terceros) deben escribirse de acuerdo con estos estándares, pero
cuando una biblioteca existente tiene un estilo diferente, se prefiere la coherencia interna.
Principio primordial
Los nombres que son visibles para el usuario como partes públicas de la API deben seguir
convenciones que reflejen el uso en lugar de la implementación.
▪ minúscula
▪ minúsculas_con_puntuaciones
▪ MAYÚSCULAS
▪ UPPER_CASE_WITH_UNDERSCORES
Nota: Cuando utilice siglas en CapWords, escriba en mayúscula todas las letras de las
siglas. Por tanto, HTTPServerError es mejor que HttpServerError.
Capitalized_Words_With_Underscores (¡feo!)
También existe el estilo de usar un prefijo único corto para agrupar nombres relacionados.
Esto no se usa mucho en Python, pero se menciona para completarlo. Por ejemplo, la
función os.stat () devuelve una tupla cuyos elementos tradicionalmente tienen
nombres como st_mode , st_size , st_mtime , etc. (Esto se hace para enfatizar la
correspondencia con los campos de la estructura de llamada del sistema POSIX, lo que
ayuda a los programadores familiarizados con eso).
La biblioteca X11 utiliza una X inicial para todas sus funciones públicas. En Python, este
estilo generalmente se considera innecesario porque los nombres de atributo y método
tienen como prefijo un objeto, y los nombres de función tienen como prefijo un nombre de
módulo.
Además, se reconocen las siguientes formas especiales que utilizan guiones bajos al
principio o al final (generalmente se pueden combinar con cualquier convención de
casos):
En algunas fuentes, estos caracteres son indistinguibles de los números uno y cero. Cuando
tenga la tentación de usar 'l', use 'L' en su lugar.
Compatibilidad ASCII
Los identificadores utilizados en la biblioteca estándar deben ser compatibles con ASCII
como se describe en la sección de políticas de PEP 3131 .
Nombres de clases
Los nombres de las clases normalmente deben usar la convención de CapWords.
La convención de nomenclatura para funciones se puede usar en cambio en los casos en que
la interfaz está documentada y se usa principalmente como un invocable.
Tenga en cuenta que existe una convención separada para los nombres incorporados: la
mayoría de los nombres incorporados son palabras individuales (o dos palabras se ejecutan
juntas), y la convención de CapWords se usa solo para nombres de excepción y constantes
incorporadas.
Escriba nombres de variables
Los nombres de las variables de tipo introducidas en PEP 484 normalmente deben usar
CapWords prefiriendo nombres cortos: T , AnyStr , Num . Se recomienda agregar los
sufijos _co o _contra a las variables utilizadas para declarar el comportamiento
covariante o contravariante correspondientemente:
escribiendo import TypeVar
Nombres de excepción
Debido a que las excepciones deben ser clases, aquí se aplica la convención de
nomenclatura de clases. Sin embargo, debe utilizar el sufijo "Error" en los nombres de sus
excepciones (si la excepción en realidad es un error).
Los módulos que están diseñados para usarse a través de M import * deben usar el
mecanismo __todos__ para evitar la exportación de globales, o usar la convención
anterior de prefijar dichos globales con un guión bajo (lo que puede hacer para indicar que
estos globales son "módulo no público ").
Los nombres de las variables siguen la misma convención que los nombres de las funciones.
Utilice un guión bajo inicial solo para métodos no públicos y variables de instancia.
Para evitar conflictos de nombres con subclases, use dos guiones bajos iniciales para
invocar las reglas de modificación de nombres de Python.
Python modifica estos nombres con el nombre de la clase: si la clase Foo tiene un atributo
llamado __a , Foo no puede acceder a él .__ a . (Un usuario insistente aún podría
obtener acceso llamando a Foo._Foo__a .) Generalmente, los guiones bajos iniciales
dobles deben usarse solo para evitar conflictos de nombres con atributos en clases
diseñadas para ser subclasificadas.
Nota: existe cierta controversia sobre el uso de __names (ver más abajo).
Constantes
Las constantes generalmente se definen a nivel de módulo y se escriben en letras
mayúsculas con guiones bajos que separan las palabras. Los ejemplos incluyen
MAX_OVERFLOW y TOTAL .
Los atributos públicos son aquellos que espera que usen clientes de su clase no
relacionados, con su compromiso de evitar cambios incompatibles con versiones
anteriores. Los atributos no públicos son aquellos que no están destinados a ser utilizados
por terceros; no ofrece garantías de que los atributos no públicos no cambiarán o incluso se
eliminarán.
Otra categoría de atributos son los que forman parte de la "subclase API" (a menudo
denominada "protegida" en otros idiomas). Algunas clases están diseñadas para heredarse,
ya sea para ampliar o modificar aspectos del comportamiento de la clase. Al diseñar una
clase de este tipo, tenga cuidado de tomar decisiones explícitas sobre qué atributos son
públicos, cuáles son parte de la API de subclase y cuáles realmente solo deben ser utilizados
por su clase base.
▪ Si el nombre de su atributo público choca con una palabra clave reservada, agregue un
guión bajo al final de su nombre de atributo. Esto es preferible a una abreviatura o una
ortografía corrupta. (Sin embargo, a pesar de esta regla, 'cls' es la ortografía preferida
para cualquier variable o argumento que se sepa que es una clase, especialmente el
primer argumento de un método de clase).
▪ Para atributos de datos públicos simples, es mejor exponer solo el nombre del atributo, sin
métodos complicados de acceso / mutador. Tenga en cuenta que Python proporciona un
camino fácil para futuras mejoras, en caso de que descubra que un atributo de datos
simple necesita desarrollar un comportamiento funcional. En ese caso, utilice
propiedades para ocultar la implementación funcional detrás de una sintaxis de acceso a
atributos de datos simple.
▪ Si su clase está destinada a ser subclasificada y tiene atributos que no desea que utilicen
las subclases, considere nombrarlos con guiones bajos iniciales dobles y sin guiones
bajos finales. Esto invoca el algoritmo de manipulación de nombres de Python, donde el
nombre de la clase se transforma en el nombre del atributo. Esto ayuda a evitar
colisiones de nombres de atributos en caso de que las subclases contengan
inadvertidamente atributos con el mismo nombre.
Nota 1: Tenga en cuenta que solo se usa el nombre de clase simple en el nombre
mutilado, por lo que si una subclase elige el mismo nombre de clase y nombre de
atributo, aún puede obtener colisiones de nombres.
Nota 2: La alteración de nombres puede hacer que ciertos usos, como la depuración
y __getattr __ () , sean menos convenientes. Sin embargo, el algoritmo de
manipulación de nombres está bien documentado y es fácil de realizar
manualmente.
Nota 3: No a todo el mundo le gusta la manipulación de nombres. Intente equilibrar la
necesidad de evitar conflictos de nombres accidentales con el uso potencial por parte de
personas avanzadas.
Para soportar mejor la introspección, los módulos deben declarar explícitamente los
nombres en su API pública usando el atributo __all__ . Establecer __all__ en una
lista vacía indica que el módulo no tiene API pública.
Una interfaz también se considera interna si cualquier espacio de nombres que contenga
(paquete, módulo o clase) se considera interno.
Recomendaciones de programación
▪ El código debe estar escrito de una manera que no perjudique a otras implementaciones
de Python (PyPy, Jython, IronPython, Cython, Psyco, etc.).
▪ si foo no es None:
▪ # Equivocado:
▪ si no foo es Ninguno:
PEP 207 indica que las reglas de reflexividad se asumidas por Python. Por lo tanto, el
intérprete puede intercambiar y> x con x <y , y> = x con x <= y , y puede
intercambiar los argumentos de x == y y x! = Y . Las operaciones sort () y min
() están garantizadas para usar el operador < y la función max () usa
el operador > . Sin embargo, es mejor implementar las seis operaciones para que
no surja confusión en otros contextos.
▪ Utilice siempre una declaración def en lugar de una declaración de asignación que
vincule una expresión lambda directamente a un identificador:
▪ # Correcto:
▪ # Equivocado:
▪ f = lambda x: 2 * x
▪ Cuando genere una excepción en Python 2, use raise ValueError ('mensaje') en lugar
de la forma anterior raise ValueError, 'mensaje' .
La última forma no es la sintaxis legal de Python 3.
La forma de uso de par también significa que cuando los argumentos de excepción son
largos o incluyen formato de cadena, no es necesario usar caracteres de continuación de
línea gracias a los paréntesis que los contienen.
▪ Cuando detecte excepciones, mencione excepciones específicas siempre que sea posible
en lugar de usar una cláusula excepto :
▪ intentar:
▪ importar módulo_específico_de_plataforma
▪ excepto ImportError:
▪ platform_specific_module = Ninguno
Una buena regla general es limitar el uso de cláusulas "excepto" desnudas a dos casos:
▪ procesar datos()
Esta es la única sintaxis compatible con Python 3 y evita los problemas de ambigüedad
asociados con la sintaxis antigua basada en comas.
▪ Además, para todas las cláusulas try / except, limite la cláusula try a la cantidad
mínima absoluta de código necesaria. Nuevamente, esto evita enmascarar
errores:
▪ # Correcto:
▪ intentar:
▪ excepto KeyError:
▪ demás:
▪ return handle_value (valor)
▪ # Equivocado:
▪ intentar:
▪ # ¡Demasiado amplia!
▪ excepto KeyError:
▪ # También detectará KeyError generado por handle_value () ▪
▪ Cuando un recurso es local para una sección particular de código, use una instrucción
with para asegurarse de que se limpie de manera rápida y confiable después de su
uso. También es aceptable una declaración de intento / finalización.
▪ do_stuff_in_transaction (conexión)
▪ # Equivocado:
▪ con conexión:
▪ do_stuff_in_transaction (conexión)
▪ si x> = 0:
▪ demás:
▪ regresar Ninguno
▪
▪ si x <0:
▪ regresar Ninguno
▪ # Equivocado:
▪ si x> = 0:
▪ si x <0:
▪ regreso
Los métodos de cadena son siempre mucho más rápidos y comparten la misma API con
cadenas Unicode. Anule esta regla si se requiere compatibilidad con versiones
anteriores de Pythons anteriores a 2.0.
▪ Use ''.startswith () y '' .endswith () en lugar de cortar cadenas para buscar prefijos o
sufijos.
startswith () y endswith () son más limpios y menos propensos a errores:
# Correcto:
si foo.startswith ('bar'):
# Equivocado:
si foo [: 3] == 'bar':
▪ # Equivocado:
Cuando compruebe si un objeto es una cadena, tenga en cuenta que también podría ser una
cadena Unicode. En Python 2, str y unicode tienen una clase base común, basetring, por lo
que puede hacer:
si es instancia (obj, cadena base):
Tenga en cuenta que en Python 3, unicode y la cadena base ya no existen (solo hay str
) y un objeto de bytes ya no es un tipo de cadena (es una secuencia de enteros en su lugar).
▪ Para las secuencias (cadenas, listas, tuplas), utilice el hecho de que las secuencias vacías
son falsas:
▪ # Correcto:
▪ si no es seq:
▪ si seq:
▪ # Equivocado:
▪ si len (seq):
▪ si no len (seq):
▪ # Correcto:
▪ si saludo:
▪ # Equivocado:
▪ si saludo == Verdadero:
Peor:
# Equivocado:
si el saludo es verdadero:
▪ intentar:
▪ 1/0
▪ por fin:
▪ volver 42
Anotaciones de funciones
Con la aceptación de PEP 484 , las reglas de estilo para las anotaciones de funciones están
cambiando.
▪ Sin embargo, fuera de stdlib, ahora se recomiendan los experimentos dentro de las
reglas de PEP 484 . Por ejemplo, marcar una gran biblioteca o aplicación de terceros
con anotaciones de tipo de estilo PEP 484 , revisar lo fácil que fue agregar esas
anotaciones y observar si su presencia aumenta la comprensibilidad del código.
▪ La biblioteca estándar de Python debería ser conservadora al adoptar tales anotaciones,
pero su uso está permitido para código nuevo y para grandes refactorizaciones.
▪ Para el código que quiera hacer un uso diferente de las anotaciones de funciones se
recomienda poner un comentario del formulario:
▪ # tipo: ignorar
cerca de la parte superior del archivo; esto le dice al verificador de tipos que ignore
todas las anotaciones. (Se pueden encontrar formas más detalladas de deshabilitar las
quejas de los verificadores de tipo en PEP 484 ).
▪ Al igual que los linters, los comprobadores de tipos son herramientas opcionales e
independientes. Los intérpretes de Python de forma predeterminada no deberían emitir
ningún mensaje debido a la verificación de tipos y no deberían alterar su
comportamiento en función de las anotaciones.
▪ Los usuarios que no quieran utilizar verificadores de tipo pueden ignorarlos. Sin embargo,
se espera que los usuarios de paquetes de bibliotecas de terceros quieran ejecutar
verificadores de tipo sobre esos paquetes. Para este propósito, PEP 484 recomienda el
uso de archivos stub: archivos .pyi que el verificador de tipos lee con preferencia a los
archivos .py correspondientes. Los archivos stub se pueden distribuir con una biblioteca
o por separado (con el permiso del autor de la biblioteca) a través del repositorio
mecanografiado [5] .
▪ Para el código que debe ser compatible con versiones anteriores, se pueden agregar
anotaciones de tipo en forma de comentarios. Consulte la sección correspondiente
de PEP 484 [6] .
Anotaciones variables
PEP 526 introdujo anotaciones variables. Las recomendaciones de estilo para ellos son
similares a las de las anotaciones de funciones descritas anteriormente:
▪ Si una tarea tiene un lado derecho, entonces el signo de igualdad debe tener
exactamente un espacio en ambos lados:
▪ # Correcto:
▪ código: int
▪
▪ punto de clase:
▪ # Equivocado:
▪
▪ prueba de clase:
▪ Aunque el PEP 526 se acepta para Python 3.6, la sintaxis de anotación de variable es la
sintaxis preferida para los archivos stub en todas las versiones de Python (consulte PEP
484 para obtener más detalles).
Notas al pie
Referencias
[1] PEP 7 , Guía de estilo para código C, van Rossum
[2] Guía de estilo de GNU Mailman de
Barry http://barry.warsaw.us/software/STYLEGUIDE.txt
[3] The TeXBook de Donald Knuth , páginas 195 y 196.
[4] http://www.wikipedia.com/wiki/CamelCase
[5] Repositorio de
Typehed https://github.com/python/typeshed
[6] Sintaxis sugerida para Python 2.7 y código transversal
https://www.python.org/dev/peps/pep
0484/#suggested-syntax-for-python-2-7-and
straddling-code
Derechos de autor
Este documento se ha colocado en el dominio público.