Todavía me estoy acostumbrando a las convenciones de Python y las uso pylint
para hacer mi código más pitónico, pero estoy desconcertado por el hecho de que a pylint no le gustan los nombres de variables de un solo carácter. Tengo algunos bucles como este:
for x in x_values:
my_list.append(x)
y cuando ejecuto pylint
, obtengo Invalid name "x" for type variable (should match [a-z_][a-z0-9_]{2,30}
, eso sugiere que un nombre de variable válido debe tener entre 3 y 31 caracteres de longitud, pero he revisado las convenciones de nomenclatura de PEP8 y no veo nada explícito con respecto a letras minúsculas individuales , y veo muchos ejemplos que los usan.
¿Hay algo que me falta en PEP8 o es un estándar exclusivo de pylint?
fuente
_
para mantener valores temporales es un antipatrón. Las variables de subrayado indican valores irrelevantes / descartados, no asignaciones temporales, comoi
ox
. Además, en el intérprete tiene un significado especial mantener el último valor de la última expresión.Un poco más de detalle sobre lo que gurney alex notó: puede decirle a PyLint que haga excepciones para los nombres de variables que (juro con el dedo meñique) son perfectamente claros aunque tengan menos de tres caracteres. Busque o agregue a su archivo pylintrc , debajo del
[FORMAT]
encabezado:Aquí pk (para clave principal), xey son nombres de variables que he agregado.
fuente
pylint 1.8.3
. pylint.pycqa.org/en/1.8/user_guide/options.htmlreturn [customer_address for customer_address in thing.get_customer_addresses() if customer_address.is_proper()]
versusreturn [a for a in thing.get_customer_addresses() if a.is_proper()]
yo afirmo que este último es más claro, como es obvio por el contexto. En general, la longitud de la variable debe correlacionarse con el alcance de la variable.En lenguajes fuertemente tipados, las variables de nombre de 1 letra pueden estar bien, porque generalmente obtienes el tipo junto al nombre en la declaración de la variable o en el prototipo de función / método:
En Python, no obtienes esta información, así que si escribes:
no le está dejando absolutamente ninguna pista al equipo de mantenimiento sobre lo que podría estar haciendo la función, cómo se llama y qué devuelve. Entonces, en Python, tiende a usar nombres descriptivos:
e incluso agrega una cadena de documentos que explica qué hacen las cosas y qué tipos se esperan.
fuente
with open(FILE) as f: items = f.readlines()
por ejemplo, donde la variablef
es realmente obvia, pero recibo advertencias de pylint. Esto me hizo cambiar a flake8.f
es totalmente diferente a unaOptionList
llamada c. Especialmente cuando no puedo cambiarle el nombre afunction
porque oculta un archivo.Hoy en día también existe una opción para anular regexp. Es decir, si desea permitir caracteres individuales como variables:
Por lo tanto,
pylint
coincidirá con PEP8 y no traerá violaciones adicionales en la parte superior. También puedes agregarlo a.pylintrc
.fuente
> 1.8.3
esta parece ser la respuesta. Puede poner esto en su.pylintrc
, así como para config permanente:variable-rgx=[a-z0-9_]{1,30}$
.La razón más profunda es que usted puede recordar lo que pretende
a
,b
,c
,x
,y
, yz
para decir cuando escribió su código, pero cuando otros leen, o incluso cuando regresan a su código, el código se vuelve mucho más fácil de leer cuando das es un nombre semántico. No escribimos cosas una vez en una pizarra y luego las borramos. Estamos escribiendo un código que podría durar una década o más y que se leerá muchas, muchas veces.Utilice nombres semánticos. Nombres semánticas que he usado han sido como
ratio
,denominator
,obj_generator
,path
, etc. Se puede tomar un segundo extra o dos para escribir a cabo, pero el tiempo que se ahorra tratando de averiguar lo que ha escrito ni media hora a partir de entonces es bien vale la pena .fuente