Je suis toujours en train de m'habituer aux conventions python et à les utiliser pylint
pour rendre mon code plus pythonique, mais je suis déconcerté par le fait que pylint n'aime pas les noms de variables à caractère unique. J'ai quelques boucles comme celle-ci:
for x in x_values:
my_list.append(x)
et quand je cours pylint
, j'obtiens Invalid name "x" for type variable (should match [a-z_][a-z0-9_]{2,30}
- cela suggère qu'un nom de variable valide doit contenir entre 3 et 31 caractères, mais j'ai regardé à travers les conventions de dénomination PEP8 et je ne vois rien d'explicite concernant les lettres minuscules simples , et je vois beaucoup d'exemples qui les utilisent.
Y a-t-il quelque chose qui me manque dans PEP8 ou s'agit-il d'une norme propre à pylint?
la source
_
pour contenir des valeurs temporaires est anti-modèle. Les variables de soulignement indiquent des valeurs non pertinentes / ignorées, et non une affectation temporaire, commei
oux
. De plus, dans l'interpréteur, il a une signification particulière pour contenir la dernière valeur de la dernière expression.Un peu plus de détails sur ce que gurney alex a noté: vous pouvez dire à PyLint de faire des exceptions pour les noms de variables qui (vous le jurez) sont parfaitement clairs même s'ils comportent moins de trois caractères. Recherchez ou ajoutez à votre fichier pylintrc , sous l'en-
[FORMAT]
tête:Ici, pk (pour la clé primaire), x et y sont des noms de variables que j'ai ajoutés.
la source
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()]
vsreturn [a for a in thing.get_customer_addresses() if a.is_proper()]
je prétends que ce dernier est plus clair, comme cela ressort clairement du contexte. En général, la longueur de la variable doit être en corrélation avec la portée de la variable.Dans les langages fortement typés, les variables de nom à 1 lettre peuvent être ok-ish, car vous obtenez généralement le type à côté du nom dans la déclaration de la variable ou dans le prototype de fonction / méthode:
En Python, vous n'obtenez pas ces informations, donc si vous écrivez:
vous ne laissez absolument aucun indice à l'équipe de maintenance sur ce que la fonction pourrait faire, comment elle est appelée et ce qu'elle renvoie. Donc, en Python, vous avez tendance à utiliser des noms descriptifs:
et vous ajoutez même une docstring expliquant ce que fait le truc et quels types sont attendus.
la source
with open(FILE) as f: items = f.readlines()
par exemple, où la variablef
est vraiment évidente, mais j'obtiens des avertissements pylint. Cela m'a fait changer pour flake8.f
est totalement différente d'uneOptionList
appelée c. Surtout quand je ne peux pas le renommerfunction
car il masque un élément intégré.De nos jours, il existe également une option pour remplacer l'expression rationnelle. Par exemple, si vous souhaitez autoriser des caractères uniques en tant que variables:
Donc,
pylint
correspondra à PEP8 et n'apportera pas de violations supplémentaires. Vous pouvez également l'ajouter à.pylintrc
.la source
> 1.8.3
cela semble être la réponse. Peut mettre dans votre.pylintrc
aussi bien pour config permanente:variable-rgx=[a-z0-9_]{1,30}$
.La raison plus profonde est que vous souvenez peut - être ce que vous vouliez
a
,b
,c
,x
,y
etz
à dire quand vous avez écrit votre code, mais quand d' autres le lisent, ou même quand vous revenez à votre code, le code devient beaucoup plus lisible lorsque vous donnez c'est un nom sémantique. Nous n'écrivons pas des trucs une fois sur un tableau pour ensuite les effacer. Nous écrivons du code qui pourrait rester une dizaine d'années ou plus, et être lu de nombreuses fois.Utilisez des noms sémantiques. Les noms sémantiques que j'ai utilisés ont été comme
ratio
,denominator
,obj_generator
,path
, etc. Il peut prendre une seconde ou deux pour les taper, mais le temps que vous gagnez à essayer de comprendre ce que vous avez écrit même une demi - heure à partir de là est bien la peine .la source