いくつかの行の長さが80文字を超えるPythonを記述しました。これは、このしきい値を下回る必要があります。行の長さを減らすためにコードを適応させるにはどうすればよいですか?
現在のエディター(Kate)は、行の長さが80文字に達するかそれを超えると、Wordの境界に改行を挿入するように構成されています。これにより、境界を越えたことがすぐにわかります。さらに、80文字の位置を示す赤い線があり、線がいつ流れるかを事前に警告します。これらにより、複数の物理回線に適合する論理回線を計画できます。
実際にそれらを合わせる方法については、いくつかのメカニズムがあります。行を\で終了できますが、これはエラーを起こしやすいです。
# works
print 4 + \
2
# doesn't work
print 4 + \
2
違い?違いは目に見えません。2番目のケースでは、バックスラッシュの後に空白文字がありました。おっとっと!
代わりに何をすべきですか?さて、括弧で囲んでください。
print (4 +
2)
\は必要ありません。これは実際に普遍的に機能し、\は必要ありません。属性アクセス境界でも!
print (foo
.bar())
文字列の場合、明示的に追加することも、Cスタイルの結合を使用して暗黙的に追加することもできます。
# all of these do exactly the same thing
print ("123"
"456")
print ("123" +
"456")
print "123456"
最後に、特に括弧だけでなく、任意の形式の括弧(()、[]。{})にあるものはどこにでも改行を入れることができます。そのため、たとえば、要素がコンマで区切られている限り、複数行にわたってリストリテラルを使用できます。
これらすべては、Pythonの 公式ドキュメント にあります。また、クイックノート PEP-8 では、80文字ではなく79文字を制限として指定しています。
80文字を超えるコードが関数呼び出し(または定義)である場合、引数行を改行します。 Pythonは括弧を認識し、1行として認識します。
function(arg, arg, arg, arg,
arg, arg, arg...)
80文字を超えるコードが自然に分割できないコード行である場合、バックスラッシュ\
を使用して改行を「エスケープ」できます。
some.weird.namespace.thing.that.is.long = ','.join(strings) + \
'another string'
括弧を使用することもできます。
some.weird.namespace.thing.that.is.long = (','.join(strings) +
'another string')
すべてのタイプのセットブラケット{}(dict/set)、[](リスト)、()(タプル)は、問題なく複数の行に分割できます。これにより、より適切な書式設定が可能になります。
mydict = {
'key': 'value',
'yes': 'no'
}
慣用的Python 言います:
最後の手段としてバックスラッシュを使用する
したがって、括弧_()
_を使用できる場合は、バックスラッシュを避けてください。 a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines.across.the.whole.trainyard.and.several.states()
がある場合は、次のようにします。
_lines = a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines
lines.across.the.whole.trainyard.and.several.states()
_
または、できればコードをリファクタリングしてください。お願いします。
以前の回答に2つのポイントを追加します。
文字列は自動的に連結できるため、非常に便利です。
this_is_a_long_string = ("lkjlkj lkj lkj mlkj mlkj mlkj mlkj mlkj mlkj "
"rest of the string: no string addition is necessary!"
" You can do it many times!")
これは効率的であることに注意してください:notを実行すると、コードの実行時に文字列の連結が計算されます:代わりに、これは単一の長い文字列リテラルと直接見なされるため、効率的です。
Devinの答えに関連する小さな警告:「括弧」構文は実際には「普遍的に機能する」わけではありません。たとえば、d [42] = "H22G"は次のように書くことはできません。
(d
[42] = "H2G2")
括弧は「計算済み」式の周りでのみ使用できるためです(上記のような割り当て(=)は含まれません)。
別の例は、構文エラーを生成する次のコードです。
with (open("..... very long file name .....")
as input_file):
実際、より一般的には式を括弧で囲むことはできません(式のみ)。
これらの場合、「\」構文を使用するか、可能な場合は「\」を避けるため、コードを複数のステートメントに分割することができます。