96 votes

La méthode chaînée appelle le style d'indentation en Python

À la lecture de la PEP-8, je reçois ce que vous devriez mettre la parenthèse fermante sur la même ligne que le dernier argument dans les appels de fonction:

ShortName.objects.distinct().filter(
    product__photo__stockitem__isnull=False)

Probablement, à long expressions sont les meilleurs pour éviter à tout. Mais si elle est indésirable, comment vous y prendriez-vous plusieurs enchaîné les appels de méthode? Si la parenthèse fermante être sur une nouvelle ligne?

ShortName.objects.distinct().filter(
    product__photo__stockitem__isnull=False
).values_list('value', flat=True)

Qu'en est aucun des arguments des méthodes? Comment écrire sur plusieurs lignes sans faire référence à l'intermédiaire en valeurs de retour?

ShortName.objects.distinct(
    ).filter().values() # looks ugly

Mise à jour: Il y a une double question de savoir Comment briser une ligne de enchaînés méthodes en Python?. La accepté de répondre suggère un familier de jQuery style de départ de chaque nouvelle ligne avec un point. L'auteur ne fournit pas de raisons ou de référence, alors j'aimerais avoir une confirmation sur un tel style ou un autre.

157voto

Raymond Hettinger Points 50330

C'est un cas où un caractère de continuation de ligne est préféré ouvrir des parenthèses.

ShortName.objects.distinct() \
         .filter().values()      # looks better

La nécessité de ce style devient de plus en plus évident que les noms de méthode plus longtemps et que les méthodes de commencer à prendre des arguments:

return some_collection.get_objects(locator=l5) \
                      .get_distinct(case_insensitive=True) \
                      .filter(predicate=query(q5)) \
                      .values()

PEP 8 est conçu pour être interprété avec une mesure de bon sens et un oeil pour la pratique et le beau. Heureusement violer toute la PEP 8 ligne directrice que les résultats de laid ou dur à lire le code.

Cela étant dit, si vous avez souvent de vous trouver en désaccord avec PEP 8, il peut être un signe qu'il y a des raisons de lisibilité des enjeux qui transcendent votre choix d'espaces :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X