0

私は Eclipse で PyDev を使用しており、実行時にのみ設定される属性がいくつかあります。通常、PyDev のエラーは次のように修正できます。

obj.runtime_attr  # @UndefinedVariable

ただし、私のステートメントは長いため、PEP8、複数行に関しては、次のようになります。

some.long.statement.\
with.multiline(obj.runtime_attr).\
more()

行の継続が壊れているため、追加できません@UndefinedVariable(PEP8 では、行末コメントの前に 2 つのスペースが必要です)。ただし、行末に配置することはできません (機能しません)。

some.long.statement.\
with.multiline(obj.runtime_attr).\
more()  # @UndefinedVariable

私が見落としているこれが機能する方法はありますか?これは、機能が不足しているだけで、うまく機能しないのでしょうか?

4

1 に答える 1

0

まず、 PEP 8 の最も重要なルールは次のとおりであることを思い出してください。

しかし、最も重要なことは、いつ矛盾するかを知ることです。スタイル ガイドが適用されない場合もあります。疑わしい場合は、最善の判断を下してください。他の例を見て、何が最適かを判断してください。

そして、ルールを避けるように具体的に言っています:

ルールを適用すると、ルールに従うコードを読むことに慣れている人であっても、コードが読みにくくなる場合。

そうは言っても、状況を悪化させずに回避できない場合を除き、これらのコード行を使用するだけで、PEP 8 の文言と精神にすでに違反しています。行の最大長で述べたように、バックスラッシュの継続を使用することは、長い行を処理するための最も好ましくない方法です。その上、「継続する行を適切にインデントするようにしてください」と具体的に言っていますが、これはあなたがしていません。


これを分割する明白な方法は、いくつかの中間変数を使用することです。これは C++ ではありません。心配する「コピー コンストラクター」のコストはありません。実際の例 (このおもちゃの例とは異なります) では、長い表現を置き換えるよりもはるかに意味のある良い名前を思いつくことができるでしょう。

intermediate = some.long.statement
multiline = intermediate.with.multiline(obj.runtime_attr)
more = multiline.more()

それが適切でない場合は、PEP 8 で明示的に述べられているように、バックスラッシュの継続よりも括弧による継続に依存する方が適切です。それはここで実行できますか?もちろん:

some.long.statement.with.multiline(
    obj.runtime_attr).more()

または、最悪の場合:

(some.long.statement.
 with.multiline(obj.runtime_attr).more())

これにより、読みやすくなるどころか、読みにくくなる場合があります。しかし、それは常にオプションです。そして、バックスラッシュの継続を機能させるために非常に長い時間を費やさなければならない場合、それはおそらく最悪の過剰な括弧付けよりも悪いことになるでしょう.


いずれにしても、これらの方法のいずれかを実行すると、各行の最後にコメントを付けることができるため、そもそも問題が発生することはありません。

于 2013-07-02T22:18:43.953 に答える