web-dev-qa-db-ja.com

Pythonスタイル-文字列での行の継続?

pythonスタイルルールに従うために、エディターを最大79列に設定しました。

PEPでは、括弧、括弧、および括弧内でPythonの暗黙の継続を使用することをお勧めします。ただし、列の制限に達したときに文字列を処理する場合、少し奇妙になります。

たとえば、複数行を使用しようとしています

mystr = """Why, hello there
wonderful stackoverflow people!"""

戻ります

"Why, hello there\nwonderful stackoverflow people!"

これは動作します:

mystr = "Why, hello there \
wonderful stackoverflow people!"

これを返すので:

"Why, hello there wonderful stackoverflow people!"

しかし、ステートメントが数ブロックインデントされている場合、これは奇妙に見えます:

do stuff:
    and more stuff:
        and even some more stuff:
            mystr = "Why, hello there \
wonderful stackoverflow people!"

2行目をインデントしようとすると:

do stuff:
    and more stuff:
        and even some more stuff:
            mystr = "Why, hello there \
            wonderful stackoverflow people!"

あなたの文字列は次のようになります:

"Why, hello there                wonderful stackoverflow people!"

これを回避する唯一の方法は次のとおりです。

do stuff:
    and more stuff:
        and even some more stuff:
            mystr = "Why, hello there" \
            "wonderful stackoverflow people!"

私はそれがより好きですが、それはまたどこかに真ん中に座っているひもがあるように見えるので、目には少し不安でもあります。これにより適切なものが生成されます。

"Why, hello there wonderful stackoverflow people!"

だから、私の質問は-これを行う方法に関する人々の推奨事項は何ですか?スタイルガイドにはこれを行う方法を示すものがありませんか?

ありがとう。

144
sjmh

隣接する文字列リテラルは自動的に1つの文字列に結合される なので、PEP 8で推奨されているように、括弧内で暗黙の行継続を使用できます。

print("Why, hello there wonderful "
      "stackoverflow people!")
217
Sven Marnach

自動連結を呼び出すのは括弧の使用であると指摘するだけです。ステートメントで既にそれらを使用している場合、それは問題ありません。そうでない場合は、括弧を挿入するのではなく、単に「\」を使用します(ほとんどのIDEが自動的に行います)。インデントは、PEP8に準拠するように文字列の継続を調整する必要があります。例えば。:

my_string = "The quick brown dog " \
            "jumped over the lazy fox"
42
user3685621

別の可能性は、textwrapモジュールを使用することです。また、これにより、質問で言及されているように、「文字列がただどこかに座っている」という問題が回避されます。

import textwrap
mystr = """\
        Why, hello there
        wonderful stackoverfow people"""
print (textwrap.fill(textwrap.dedent(mystr)))
5
AliA

私はこれを回避しました

mystr = ' '.join(
        ["Why, hello there",
         "wonderful stackoverflow people!"])

過去には。完璧ではありませんが、改行を入れる必要がない非常に長い文字列に対してはうまく機能します。

1
nmichaels

これはとてもきれいな方法です:

myStr = ("firstPartOfMyString"+
         "secondPartOfMyString"+
         "thirdPartOfMyString")
0
Jason Schmidt