PEP 8, pourquoi pas d'espaces autour de " = " dans l'argument mot-clé ou une valeur de paramètre par défaut?
Est-ce incompatible avec le recommander espaces autour de chaque autre occurrence de =
dans le code Python?
Comment:
func(1, 2, very_long_variable_name=another_very_long_variable_name)
de mieux que:
func(1, 2, very_long_variable_name = another_very_long_variable_name)
Tous les liens de discussion/explication par Python BDFL sera appréciée.
L'esprit, cette question est plus sur kwargs que les valeurs par défaut, j'ai juste utilisé le phrasé de la PEP 8.
Je ne suis pas solliciter des opinions. Je demande, pour des raisons derrière cette décision. C'est plus comme demander à pourquoi aurais-je utiliser {
sur la même ligne que if
instruction dans un programme C, pas si je devrais l'utiliser ou pas.
Vous devez vous connecter pour publier un commentaire.
Je suppose que c'est parce qu'un argument mot-clé est essentiellement différente de celle d'une affectation de variable.
Par exemple, il y a beaucoup de code comme ceci:
Comme vous le voyez, il fait complètement sens d'affecter une variable à un argument mot-clé nommé exactement la même, de sorte qu'il améliore la lisibilité pour les voir sans les espaces. Il est plus facile de reconnaître que nous sommes en utilisant le mot-clé arguments et non l'affectation d'une variable à lui-même.
En outre, les paramètres ont tendance à aller dans la même ligne alors que les affectations sont généralement chacun dans leur propre ligne, afin de gagner de l'espace est susceptible d'être une question importante, là.
{
sur une nouvelle ligne aprèsif
(enregistre le même nombre de caractères), mais pas dans la définition de la classe. Un mot-clé paramètre est différente de la valeur par défaut, mais utilise toujours le même style de recommandation.kw1 = kw1, kw2 = kw2
😉 mais peut-être que c'était ce que Guido et Barry pensée.Je ne voudrais pas utiliser very_long_variable_name comme un argument par défaut. Donc, considérez ceci:
au cours de cette:
Aussi, il n'a pas beaucoup de sens d'utiliser des variables comme valeurs par défaut. Peut-être que certaines des variables constantes (qui ne sont pas vraiment des constantes) et, dans ce cas, je voudrais utiliser des noms de tous les chapeaux, descriptif court que possible. Donc pas de another_very_...
De l'OMI, en laissant des espaces pour args offre nettoyeur regroupement visuel de l'arg/paires de valeur; il semble de moins encombré.
arg1=40
est plus lisible que le lien est plus évident.Il y a des avantages et des inconvénients.
Je n'aime pas du tout comment PEP8 code conforme aux lectures. Je n'achète pas dans l'argument que
very_long_variable_name=another_very_long_variable_name
peut jamais être plus lisible par l'homme quevery_long_variable_name = another_very_long_variable_name
.Ce n'est pas la façon dont les gens lisent. C'est un supplémentaire de la charge cognitive, en particulier en l'absence de coloration syntaxique.
Il y a un avantage significatif, cependant. Si l'espacement règles sont respectées, il rend la recherche pour les paramètres exclusivement à l'aide d'outils beaucoup plus efficace.
Je pense qu'il y a plusieurs raisons à cela, mais j'ai peut-être juste la rationalisation:
a == b
qui peuvent aussi être des expressions valides à l'intérieur d'un appel.Pour moi, cela rend le code plus lisible, et donc une bonne convention.
Je pense que la clé de la différence de style entre les affectations de variables et la fonction des mots clés les missions est qu'il ne devrait être qu'une seule
=
sur une ligne pour l'ancien, alors que de manière générale il y a plusieurs=
s sur une ligne pour la dernière.Si il n'y avait pas d'autres considérations, nous préférons
foo = 42
àfoo=42
, parce que celui-ci n'est pas la façon dont les signes "égal" sont généralement mis en forme, et parce que l'ancienne joliment sépare visuellement la variable et la valeur avec des espaces blancs.Mais quand il y a des missions multiples sur une seule ligne, nous préférons
f(foo=42, bar=43, baz=44)
àf(foo = 42, bar = 43, baz = 44)
, parce que l'ancien sépare visuellement les diverses missions avec des espaces blancs, tandis que le second ne le fait pas, le rendant un peu plus difficile de voir où les couples clé/valeur sont.Voici une autre façon de le mettre: il y est une cohérence derrière la convention. Que la cohérence est ceci: "au plus haut niveau de la séparation" est visuellement plus clair par des espaces. Tout les niveaux inférieurs de la séparation ne sont pas (parce que ce serait confondre avec l'espace séparant le niveau supérieur). Pour l'attribution de la variable, le plus haut niveau de la séparation entre la variable et la valeur. Pour la fonction de mot-clé de l'assignation, le plus haut niveau de la séparation entre les différentes missions elles-mêmes.