Einige weitere Optionen. In Ipython mit aktiviertem Pylab befindet sich dedent bereits im Namespace. Ich habe nachgesehen und es ist von matplotlib. Oder es kann importiert werden mit:
from matplotlib.cbook import dedent
In der Dokumentation heißt es, dass es schneller ist als das Textwrap-Äquivalent und in meinen Tests in Ipython ist es mit meinen Schnelltests im Durchschnitt dreimal schneller. Es hat auch den Vorteil, dass alle führenden Leerzeilen verworfen werden, sodass Sie beim Erstellen der Zeichenfolge flexibel sein können:
"""
line 1 of string
line 2 of string
"""
"""\
line 1 of string
line 2 of string
"""
"""line 1 of string
line 2 of string
"""
Die Verwendung der Matplotlib für diese drei Beispiele führt zu demselben vernünftigen Ergebnis. Die Textwrap-Dedent-Funktion hat eine führende Leerzeile mit dem ersten Beispiel.
Offensichtlicher Nachteil ist, dass sich Textwrap in der Standardbibliothek befindet, während matplotlib ein externes Modul ist.
Einige Kompromisse hier ... Die dedent-Funktionen machen Ihren Code besser lesbar, wenn die Zeichenfolgen definiert werden, müssen jedoch später verarbeitet werden, um die Zeichenfolge in einem verwendbaren Format zu erhalten. In Docstrings ist es offensichtlich, dass Sie den richtigen Einzug verwenden sollten, da die meisten Verwendungen des Docstrings die erforderliche Verarbeitung ausführen.
Wenn ich eine nicht lange Zeichenfolge in meinem Code benötige, finde ich den folgenden zugegebenermaßen hässlichen Code, in dem ich die lange Zeichenfolge aus dem einschließenden Einzug herausfallen lasse. Scheitert definitiv an "Schön ist besser als hässlich", aber man könnte argumentieren, dass es einfacher und expliziter ist als die dedizierte Alternative.
def example():
long_string = '''\
Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip.\
'''
return long_string
print example()