8

以下は構文的に無効です。

if extremely_long_condition_that_takes_up_a_whole_line and
  another_condition:
    #do something

以下が有効です。

if (extremely_long_condition and
  another_condition):
    #do something

これらが異なるのはなぜですか?より一般的に言えば、なぜ #2 は問題ないのに #1 は危険/あいまいなのですか? 最初のステートメントがどのようになっているか、あいまいなステートメントに一般化されているかわかりません。

4

5 に答える 5

11

括弧は、閉じられるまで行が続くことを意味します。

PEP-8 はこれについて語っています:

長い行をラップする好ましい方法は、Python の暗黙の行継続を括弧、ブラケット、およびブレース内で使用することです。式を括弧で囲むことにより、長い行を複数の行に分割できます。これらは、行の継続にバックスラッシュを使用するよりも優先して使用する必要があります。

または、言語リファレンスでより正式に説明されています。

バックスラッシュ文字 (\) を使用して、2 つ以上の物理行を結合して論理行にすることができます。

括弧、角括弧、または中括弧内の式は、バックスラッシュを使用せずに複数の物理行に分割できます。

于 2013-03-27T17:59:50.747 に答える
7

中括弧がないと、単項演算子があると明らかにあいまいになります。

次の行を検討してください。

a = 3 + 4
+1

ここでは、単純な加算の後に単項正の演算子が続きます。

末尾に演算子がある行はあいまいではないと主張するかもしれません (そして、私は現在、反例を思いつきません)。パイソンの禅。


また、現在の方法では、演算子なしで複数の行にまたがる文字列を結合できることに注意してください。

a = ("Hello "
     "World")
于 2013-03-27T18:01:59.973 に答える
1

別の有効な、括弧をなくす( PEP 8では推奨されていません) :

if extremely_long_condition_that_takes_up_a_whole_line and \
  another_condition:
    #do something

PEP 8から:

長い行をラップする好ましい方法は、Python の暗黙の行継続を括弧、ブラケット、およびブレース内で使用することです。式を括弧で囲むことにより、長い行を複数の行に分割できます。これらは、行の継続にバックスラッシュを使用するよりも優先して使用する必要があります。継続する行は適切にインデントしてください。

PEP 8を読むことをお勧めします。

于 2013-03-27T18:06:14.140 に答える
0

すべての括弧には、行の継続が組み込まれています。具体的にはわかりませんandが、行の継続が推奨されない理由 ( \-style) は、末尾の空白がコマンドを無効にする可能性があり、見にくいためです。ただし、括弧内の末尾の空白はそれを壊すことはありません。

于 2013-03-27T18:00:21.257 に答える
0

もちろん、関数を使用してより理解しやすくすることもできます。

それ以外の:

if (extremely_long_condition_that_takes_up_a_whole_line and
  another_condition):
    #do something

あなたがすることができます:

def cond():
    extremely_long_condition_that_takes_up_a_whole_line

def another_condition():
     # whatever

if cond() and another_condition():
     #do something 

または、条件がたくさんある場合:

if all(conditions(x) for x in seq):
     #do something

Python の設計は、長い行やブロックを読みやすい小さなビットに分割することを奨励することを目的としています。あなたはその励ましに出くわしています。

行数を 70 文字に抑えるようにしています。

私にとって難しいのは、ネストされた内包表記の長さを再調整することです。区切りが実際に読みやすくなるように、それらを区切ります。

于 2013-03-27T18:16:46.390 に答える