144

PEP-8 を読むと、関数呼び出しの最後の引数と同じ行に閉じ括弧を配置する必要があることがわかりました。

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

おそらく、長い式はまったく避けるのが最善です。しかし、それが望ましくない場合、複数の連鎖メソッド呼び出しについてどのように対処しますか? 閉じ括弧は新しい行にあるべきですか?

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

引数のないメソッドはどうですか?中間の戻り値を参照せずに複数の行に記述する方法は?

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

更新: Python でチェーンされたメソッドの行を分割する方法の重複した質問がありますか? . 受け入れられた答えは、新しい行をそれぞれドットで開始する jQuery スタイルからおなじみのものを示唆しています。著者は理由や信頼できる参考文献を提供していないので、そのようなスタイルまたは代替案について確認したいと思います。

4

2 に答える 2

228

これは、開き括弧よりも行継続文字の方が好まれる場合です。

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

メソッド名が長くなり、メソッドが引数を取るようになるにつれて、このスタイルの必要性はより明白になります。

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

PEP 8 は、ある程度の常識と実用性と美しさの両方に目を向けて解釈されることを意図しています。醜いコードや読みにくいコードになる PEP 8 ガイドラインに喜んで違反してください。

そうは言っても、PEP 8 と頻繁に対立する場合は、空白の選択を超えた可読性の問題があることを示している可能性があります :-)

于 2011-12-30T19:29:54.507 に答える
86

() を使用して強制的に行を結合し、これを行うのが最善だと思います。

(ShortName.objects.distinct() # Look ma!
 .filter(product__photo__stickitem__isnull=False) # Comments are allowed
 .values_list('value', flat=True))

理想的ではありませんが、視覚的に際立っていて、一連の呼び出しが何であるかがある程度明確になるので気に入っています。行末コメントを許可しますが、\改行は許可しません。

于 2011-12-30T19:32:41.827 に答える