Pourquoi PEP 8 recommande-=
t-il de ne pas avoir d'espaces dans un argument de mot clé ou une valeur de paramètre par défaut ?
Est-ce incompatible avec la recommandation d'espaces autour de chaque autre occurrence de =
dans le code Python?
Comment est:
func(1, 2, very_long_variable_name=another_very_long_variable_name)
mieux que:
func(1, 2, very_long_variable_name = another_very_long_variable_name)
Tout lien vers une discussion / explication par le BDFL de Python sera apprécié.
Attention, cette question concerne plus les kwargs que les valeurs par défaut, je viens d'utiliser le libellé de PEP 8.
Je ne sollicite pas d'avis. Je demande les raisons de cette décision. C'est plus comme demander pourquoi j'utiliserais {
sur la même ligne que l' if
instruction dans un programme C, pas si je devrais l'utiliser ou non.
la source
{
une nouvelle ligne aprèsif
(enregistre le même nombre de caractères) mais pas dans la définition de classe. De plus, un paramètre de mot-clé est différent de la valeur par défaut mais utilise toujours la même recommandation de style.kw1 = kw1, kw2 = kw2
;) mais c'est peut-être ce que pensaient Guido et Barry.Je n'utiliserais pas very_long_variable_name comme argument par défaut. Alors considérez ceci:
sur ceci:
En outre, il n'est pas très logique d'utiliser des variables comme valeurs par défaut. Peut-être des variables constantes (qui ne sont pas vraiment des constantes) et dans ce cas j'utiliserais des noms en majuscules, descriptifs mais aussi courts que possible. Donc pas d'autre_très _...
la source
Il y a des avantages et des inconvénients.
Je n'aime pas du tout la lecture du code conforme à PEP8. Je n'accepte pas l'argument qui
very_long_variable_name=another_very_long_variable_name
peut jamais être plus lisible par l'hommevery_long_variable_name = another_very_long_variable_name
. Ce n'est pas ainsi que les gens lisent. C'est une charge cognitive supplémentaire, notamment en l'absence de coloration syntaxique.Il y a cependant un avantage significatif. Si les règles d'espacement sont respectées, cela rend la recherche de paramètres exclusivement à l' aide d'outils beaucoup plus efficace.
la source
IMO laissant de côté les espaces pour args fournit un regroupement visuel plus clair des paires arg / valeur; ça a l'air moins encombré.
la source
arg1=40
est plus lisible car la relation est plus évidente.Je pense qu'il y a plusieurs raisons à cela, bien que je puisse simplement rationaliser:
a == b
qui peuvent également être des expressions valides dans un appel.la source
Pour moi, cela rend le code plus lisible et c'est donc une bonne convention.
Je pense que la principale différence en termes de style entre les attributions de variables et les attributions de mots-clés de fonction est qu'il ne devrait y avoir qu'un seul
=
sur une ligne pour le premier, alors qu'il y a généralement plusieurs=
s sur une ligne pour le second.S'il n'y avait pas d'autres considérations, nous préférerions le
foo = 42
fairefoo=42
, car ce dernier n'est pas la façon dont les signes égaux sont généralement formatés, et parce que le premier sépare visuellement la variable et la valeur par des espaces.Mais quand il y a plusieurs affectations sur une ligne, nous préférons le
f(foo=42, bar=43, baz=44)
fairef(foo = 42, bar = 43, baz = 44)
, car la première sépare visuellement les différentes affectations avec des espaces, alors que la seconde ne le fait pas, ce qui rend un peu plus difficile de voir où se trouvent les paires mot-clé / valeur.Voici une autre façon de le dire: il y a une cohérence derrière la convention. Cette cohérence est la suivante: le "niveau de séparation le plus élevé" est rendu visuellement plus clair via des espaces. Les niveaux inférieurs de séparation ne le sont pas (car ils seraient confondus avec l'espace blanc séparant le niveau supérieur). Pour l'affectation de variables, le niveau de séparation le plus élevé se situe entre la variable et la valeur. Pour l'attribution de mots clés de fonction, le niveau de séparation le plus élevé se situe entre les affectations individuelles elles-mêmes.
la source