回答:
ラインとは何ですか?あなたは問題なく次の行に引数を持つことができます:
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')
スタイルガイドによると、括弧を使用した暗黙の継続の使用が推奨されていますが、この特定のケースでは、式の周りに括弧を追加するだけではおそらく間違った方法になります。
長い行をラップする好ましい方法は、括弧、角括弧、中括弧内で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())
別のそのようなケースは、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)
PEP8は、 読みやすさを向上させるために数学者とその発行者が使用している(二項演算を壊すため反対の規則をます。
ドナルド・クヌースのブレイキングの前のスタイル二項演算子が演算子を垂直方向に揃える。これにより、追加および削除される項目を決定する際の目の負担を軽減します。
Donald Knuthは、彼のComputers and Typesettingシリーズの従来の規則を説明しています:「段落内の数式は常に2項演算と関係の後で壊れますが、表示された数式は常に2項演算の前に壊れます」[3]。
数学の伝統に従うと、通常はコードが読みやすくなります。
# Yes: easy to match operators with operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
Pythonコードでは、規則がローカルで一貫している限り、2項演算子の前または後にブレークできます。新しいコードについては、Knuthのスタイルが推奨されます。
[3]:ドナルド・クヌースのThe TeXBook、195および196ページ
The preferred way .. is by using Python's implied line continuation inside parentheses
これはと同じですby wrapping expressions in parentheses
。私は例を更新しました
バックスラッシュを使用して行を終了する際の危険性は、バックスラッシュの後に空白が追加されると(もちろん、これは非常にわかりにくい)、バックスラッシュが意図したとおりに機能しなくなることです。
詳細については、Pythonイディオムと反イディオム(Python 2またはPython 3の場合)を参照してください。
set list listchars=trail:·
、vimのようなものです。:)
馬の口から:明示的なライン結合
次のように、2つ以上の物理行をバックスラッシュ文字(
\
)を使用して論理行に結合できます。物理行が文字列リテラルまたはコメントの一部ではないバックスラッシュで終了する場合、次のように結合して単一の論理行を形成します、バックスラッシュとそれに続く行末文字を削除します。例えば: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
バックスラッシュで終わる行にはコメントを付けることができません。バックスラッシュはコメントを続けません。バックスラッシュは、文字列リテラル以外のトークンを継続しません(つまり、文字列リテラル以外のトークンは、バックスラッシュを使用して物理的な行に分割できません)。バックスラッシュは、文字列リテラルの外の行の他の場所では無効です。
これはPythonの方法ではないかもしれませんが、SQLクエリのように長い文字列を書き込むために、結合関数を含むリストを一般的に使用します。
query = " ".join([
'SELECT * FROM "TableName"',
'WHERE "SomeColumn1"=VALUE',
'ORDER BY "SomeColumn2"',
'LIMIT 5;'
])
The Hitchhiker's Guide to Python(Line Continuation)からの引用:
コードの論理行が受け入れ可能な制限より長い場合は、それを複数の物理行に分割する必要があります。Pythonインタープリターは、行の最後の文字がバックスラッシュの場合、連続する行を結合します。これはいくつかの場合に役立ちますが、脆弱であるため通常は避けてください。バックスラッシュの後の行末に空白が追加されると、コードが壊れ、予期しない結果になる可能性があります。
より良い解決策は、要素を括弧で囲むことです。行末に閉じられていない括弧を残しておくと、Pythonインタープリターは括弧が閉じられるまで次の行に参加します。同じ動作が中括弧と角括弧にも当てはまります。
ただし、多くの場合、長い論理行を分割する必要があることは、同時に多くのことを実行しようとしていることを示しており、読みやすさを妨げる可能性があります。
そうは言っても、これは一般的な文字列にも適用される複数のインポート(行制限を超える場合、PEP-8で定義)を検討する例です。
from app import (
app, abort, make_response, redirect, render_template, request, session
)
長いリテラル文字列のために行を分割したい場合は、その文字列を分割することができます:
long_string = "a very long string"
print("a very long string")
に置き換えられます
long_string = (
"a "
"very "
"long "
"string"
)
print(
"a "
"very "
"long "
"string"
)
両方の印刷ステートメントの出力:
a very long string
影響の括弧に注意してください。
リテラル文字列を分割すると、文字列の一部にのみリテラルプレフィックスを使用できることにも注意してください。
s = (
"2+2="
f"{2+2}"
)
使用行継続演算子をすなわち「\」
例:
# Ex.1
x = 1
s = x + x**2/2 + x**3/3 \
+ x**4/4 + x**5/5 \
+ x**6/6 + x**7/7 \
+ x**8/8
print(s)
# 2.7178571428571425
----------
# Ex.2
text = ('Put several strings within parentheses ' \
'to have them joined together.')
print(text)
----------
# Ex.3
x = 1
s = x + x**2/2 \
+ x**3/3 \
+ x**4/4 \
+ x**6/6 \
+ x**8/8
print(s)
# 2.3749999999999996