1. ホーム
  2. python

[解決済み] Pythonの連鎖式メソッドコールのインデントスタイル [重複] [重複

2022-05-12 13:31:39

質問

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でおなじみのスタイルを示唆しています。著者は理由や権威あるリファレンスを提供していませんので、私はそのようなスタイルまたは代替案についての確認を得たいと思います。

どのように解決するのですか?

括弧を開くよりも行継続文字が優先されるケースです。

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 と対立しているなら、それはあなたの空白の選択を超えた読みやすさの問題があることのしるしかもしれません。)