2017-07-24 5 views
1

je devais ajouter parens étrangers à une condition while aujourd'hui pour éviter les plaintes de pep8:pep8 et multiligne alors que les conditions

while not found and not something and \ 
    (time_left is None or time_left > 0): 
    (one, two, three, four) = self.gimme(timeout=time_left) 

Ma solution:

while (not found and not something and 
     (time_left is None or time_left > 0)): 
    (one, two, three, four) = self.gimme(timeout=time_left) 

Si je changé le 2ème tiret de la ligne, il se plaignait d'indentation excessive ou d'indentation manquante, pour chaque indentation de pair avec le W dans while, à 8 à droite de celui-ci. Je suis dérangé par le fait que l'ajout de parens externes pour satisfaire pep8, pour une faible amélioration de la lisibilité, va à l'encontre des principes généraux.

Des idées? Ai-je manqué une meilleure solution?

+2

PEP-8 recommande d'utiliser des parenthèses pour prolonger le backslash car celui-ci est plus fragile: un seul espace parasite après le backslash le tue. Je suis d'accord que les parenthèses supplémentaires ajoutent un peu plus de fouillis visuel, mais on s'y habitue. ;) Les espaces supplémentaires à l'intérieur de la condition entre parenthèses sont légaux, et je suis d'accord que c'est ennuyeux si votre IDE ou linter se plaint à ce sujet; OTOH, je pense qu'il semble plus propre si le code continu est indenté par un niveau d'indentation (généralement 4 espaces). –

+2

Au début, j'avais laissé une réponse, mais je commence à penser que cela va conduire à beaucoup de réponses opiniâtres sans une véritable "meilleure" approche concrète pour le faire, car cela dépend du goût. – Makoto

+0

Il existe une variété de styles de codage pour Python. Beaucoup d'entre eux sont supportés par [YAPF] (https://github.com/google/yapf#formatting-style), bien que je ne pense pas qu'il supporte le fait de préférer la continuation entre parenthèses. –

Répondre

3

Je préfère rompre les longues lignes après les instructions conditionnelles pour augmenter la lisibilité. par exemple:

while (
    not found and 
    not something and 
    (time_left is None or time_left > 9) 
): 
    (one, two, three, four) = self.gimme(timeout=time_left) 

Je pense que c'est très lisible et satisfait au moins mon contrôle de codestyle pep8.

+1

+1 et si vous utilisez grumpy-ole-pylint il va suggérer un retrait supplémentaire à l'intérieur de la condition pour le séparer visuellement du code dans le bloc while –

+0

J'ai tendance à faire quelque chose comme ça avec mon Perl, bien que je préfère (là) pour avoir l'opérateur booléen au début, avec un retrait approprié pour la clarté visuelle. Bien sûr, cela ne fonctionne pas bien pour l'espace significatif de Python. –

0

Je pense que la meilleure solution est de faire ce que vous (et votre équipe, le cas échéant) considère comme la solution la plus lisible. PEP8 est juste une ligne directrice, ce n'est pas une exigence. Focus sur l'écriture de code qui est robuste et facile à comprendre.