it-swarm.com.de

Python Fortsetzung der Style-Line mit Strings?

Bei dem Versuch, die python style-Regeln einzuhalten, habe ich meine Editoren auf maximal 79 Spalten festgelegt.

Im PEP wird empfohlen, die implizite Fortsetzung von Python in Klammern, Klammern und Klammern zu verwenden. Wenn ich mich jedoch mit Strings beschäftige, wenn ich das Col-Limit erreicht habe, wird es ein bisschen komisch.

Versuchen Sie beispielsweise, eine Mehrfachleitung zu verwenden

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

Wird zurückkehren

"Why, hello there\nwonderful stackoverflow people!"

Das funktioniert:

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

Da es dies zurückgibt:

"Why, hello there wonderful stackoverflow people!"

Aber wenn die Anweisung ein paar Blocks weiter eingerückt ist, sieht das seltsam aus:

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

Wenn Sie versuchen, die zweite Zeile einzurücken:

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

Ihre Zeichenfolge endet als:

"Why, hello there                wonderful stackoverflow people!"

Der einzige Weg, den ich gefunden habe, um dieses Problem zu umgehen, ist:

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

Was mir besser gefällt, aber auch etwas unangenehm für die Augen ist, da es so aussieht, als ob eine Schnur mitten im Nirgendwo sitzt. Dies wird das richtige produzieren:

"Why, hello there wonderful stackoverflow people!"

Meine Frage ist also: Welche Empfehlungen geben einige Leute dazu ab, und was fehlt mir in der Stilrichtlinie, die zeigt, wie ich das tun soll?

Vielen Dank.

144
sjmh

Da benachbarte Zeichenfolgenliterale automatisch zu einer einzelnen Zeichenfolge verbunden werden , können Sie einfach die implizite Zeilenfortsetzung in Klammern verwenden, wie in PEP 8 empfohlen:

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

Ich möchte nur darauf hinweisen, dass es sich um die Verwendung von Klammern handelt, die die automatische Verkettung auslösen. Das ist in Ordnung, wenn Sie sie in der Anweisung bereits verwenden. Ansonsten würde ich einfach '\' verwenden, anstatt Klammern einzufügen (was die meisten IDEs automatisch für Sie tun). Der Einzug sollte die Fortsetzung der Zeichenfolge so ausrichten, dass sie PEP8-konform ist. Z.B.:

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

Eine andere Möglichkeit ist die Verwendung des Textwrap-Moduls. Dies vermeidet auch das in der Frage erwähnte Problem, dass die Schnur nur mitten im Nirgendwo sitzt.

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

Ich bin damit umgegangen

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

in der Vergangenheit. Es ist nicht perfekt, aber es funktioniert gut für sehr lange Zeichenfolgen, die keine Zeilenumbrüche enthalten müssen.

1
nmichaels

Dies ist eine ziemlich saubere Methode:

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