2011-03-09 27 views
41

私は非常に長いifステートメントをPythonで持っています。いくつかの行に分割する最良の方法は何ですか?最高の私は、最も読みやすい/共通の意味です。非常に長いPythonのステートメント

+10

は、コードをしてください表示! –

答えて

96

PEP8によれば、長い行はかっこで囲む必要があります。括弧を使用すると、バックスラッシュを使用せずに行を分割できます。また、ブール演算子の後に改行を置くようにしてください。例えば

:ここ

if (abcdefghijklmnopqrstuvwxyz > some_other_long_identifier and 
    here_is_another_long_identifier != and_finally_another_long_name): 
    # ... your code here ... 
    pass 
+0

'E129'をオフにするか、Andrew Clarkのソリューション(http://stackoverflow.com/a/5253419/981933)を使用してください。そうしないとPEP8がエラーを投げます。 https://github.com/PyCQA/pep8/issues/126とhttps://github.com/PyCQA/pep8/issues/386を参照してください。 –

+0

'E129'をオフにしないでください。単にそれに従ってください。それなしで物を読むのは難しいです。 –

+0

まあ、私は 'E129'に従う方法を知らない。私が試したことでうれしいことではありません。 – user2061057

20

は、行の長さを制限するにPEP 8から直接の例である:

class Rectangle(Blob): 

    def __init__(self, width, height, 
       color='black', emphasis=None, highlight=0): 
     if (width == 0 and height == 0 and 
       color == 'red' and emphasis == 'strong' or 
       highlight > 100): 
      raise ValueError("sorry, you lose") 
     if width == 0 and height == 0 and (color == 'red' or 
              emphasis is None): 
      raise ValueError("I don't think so -- values are %s, %s" % 
          (width, height)) 
     Blob.__init__(self, width, height, 
         color, emphasis, highlight) 
+3

しかし、これは、pep8 lintチェッカーを使用して、次の論理行と同じインデントで視覚的にインデントされた行E129を引き起こします。 – ArtOfWarfare

+0

@ArtOfWarfareインデントが台無しになった。修正が保留中の修正、または[PEP8](http://legacy.python.org/dev/peps/pep-0008/)の例を直接参照してください。 – altendky

+0

複数のパラメータを1行に入れても読みやすさは損なわれますが、残りの部分は2行目に分割して置いてください。長すぎない場合は、それぞれを破ったり、1行にまとめたりしてください。 「高さは何のために特別なの?後に休憩があるの?」 「なぜ、「幅」や「色」の後に壊れないの?」この種の質問は、厳密な規則に従わない破りでのみ発生します。 – Zelphir

関連する問題