Pythonで改行(改行)するにはどうすればいいですか?

4601 ワード

私は長い行のコードを持っています.複数行で分解したいです.私は何を使っていますか.文法は何ですか.
たとえば、文字列を追加すると、
e = 'a' + 'b' + 'c' + 'd'

次のように2つの行に分けられます.
e = 'a' + 'b' +
    'c' + 'd'

1階
括弧と括弧の間で線を切ることができます.さらに、1行にスラッシュ文字\\を追加して、明示的にブレークできます.
x = (tuples_first_value,
     second_value)
y = 1 + \
    2

2階
これはPythonの方法ではないかもしれませんが、SQLクエリーなどの長い文字列を書くにはjoin関数のリストを使用します.
query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

#3階
行の末尾に\\を追加するか、または文を括弧で囲む( .. ).IBM:
b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

または
b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)

#4階
何の線ですか.次の行にパラメータがあるだけで問題はありません.
a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

そうでなければ、次の操作を実行できます.
if a == True and \
   b == False

スタイルガイドを参照してください.
サンプル行から:
a = '1' + '2' + '3' + \
    '4' + '5'

または、
a = ('1' + '2' + '3' +
    '4' + '5')

スタイルガイドでは、カッコ付きの暗黙的な連続子を使用するのが望ましいと指摘されていますが、この場合、式の周囲にカッコを付けるだけでは間違っている可能性があります.
#5階
馬の口から:明示的な線接続
2つ以上の物理行を論理行として接続するには、次のようにします.1つの物理行が文字列または注釈に含まれないスラッシュで終わると、次の行と1つの論理行に結合し、スラッシュおよび次の行の末尾文字を削除します.例:
 if 1900 < year < 2100 and 1 <= month <= 12 \\ and 1 <= day <= 31 and 0 <= hour < 24 \\ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1 

スラッシュで終わる行にコメントを付けることはできません.スラッシュはコメントを続けません.文字列テキスト以外のタグは、物理行間で分割することはできません.文字列以外の行では、スラッシュは不正です.
#6階
PEP 8-Pythonコードスタイルガイドから:
長い行を包装する第一の方法は、括弧、角括弧、括弧内にPythonの隠し行連続性を使用することです.式をかっこで囲むことで、長い行を複数の行に分割できます.これらは、スラッシュを使用して行を連続させるのではなく、優先的に使用してください.
スラッシュがまだ適切である場合があります.たとえば、長い複数のwith文では暗黙的な連続は使用できません.したがって、スラッシュは受け入れられます.
 with open('/path/to/some/file/you/want/to/read') as file_1, \\ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read()) 

もう1つのケースはassert文を使用することです.
継続行が適切にインデントされていることを確認します.バイナリ演算子を囲む優先位置は、演算子の前ではなく、演算子の後です.いくつかの例:
 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) 

現在、PEP 8は、可読性を向上させるために、数学者およびその発表者が逆の約束(バイナリ演算で中断するために使用される)を使用することを提案している.
ドナルド・クヌス(Donald Knuth)は、二元演算子が垂直に位置合わせされる前に、後で結合するスタイルを切断し、追加および減算する項目を決定する際に作業量を削減します.
PEP 8から:改行はバイナリ演算子の前か後か.:
ドナルド・クヌス(Donald Knuth)は、彼の『コンピュータとレイアウト』シリーズで「段落中の式は常にバイナリ演算と関係の後に中断されるが、表示される式は常にバイナリ演算の前に中断される」という従来のルールを説明している[3].
数学の伝統に従うと、通常、コードがより読みやすくなります.
 # Yes: easy to match operators with operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest) 

Pythonコードでは、ローカルで一致することを約束すれば、バイナリ演算子の前後で中断することができます.新しいコードの場合は、Knuthのスタイルを使用することをお勧めします.
[3]:Donald KnuthのThe TeXBook,195および196ページ
#7階
『The Hitchhiker's Guide to Python(Line Continuation)』:
論理コードの行長が許容可能な制限にある場合は、複数の物理行に分割する必要があります.行の最後の文字がスラッシュである場合、Pythonインタプリタは連続する行に接続されます.これは、場合によっては便利ですが、破砕しやすいため、通常は使用を避けなければなりません.反スラッシュ後の行末にスペースを追加すると、コードが破壊され、予期せぬ結果が発生する可能性があります.
より良い解決策は、要素の周囲にカッコを使用することです.行の最後に閉じていない括弧が残っている場合、Python解釈器は括弧が閉じられるまで次の行に追加されます.カッコと角カッコの動作は同じです.
ただし、通常は、長い論理線を分離する必要があります.これは、読み取りに影響を与える可能性があります.
とはいえ、これは複数回のインポートを考慮した例(移動制限を超えた場合、PEP-8で定義される)であり、通常は文字列にも適用されます.
from app import (
    app, abort, make_response, redirect, render_template, request, session
)

#8階
スラッシュを使用して行を終了する危険は、スラッシュの後にスペースを追加すると(もちろん見えにくい)、スラッシュは元の考えを実行しなくなります.
詳細については、Python習語と反習語(Python 2またはPython 3)を参照してください.