Еще несколько вариантов. В Ipython с включенным pylab dedent уже находится в пространстве имен. Я проверил, и это из Matplotlib. Или это может быть импортировано с:
from matplotlib.cbook import dedent
В документации говорится, что она быстрее, чем эквивалентная textwrap, и в моих тестах на ipython она действительно в среднем в 3 раза быстрее с моими быстрыми тестами. Он также имеет то преимущество, что отбрасывает все начальные пустые строки, что позволяет вам быть гибким в том, как вы строите строку:
"""
line 1 of string
line 2 of string
"""
"""\
line 1 of string
line 2 of string
"""
"""line 1 of string
line 2 of string
"""
Использование matplotlib dedent в этих трех примерах даст тот же разумный результат. Функция dedent textwrap будет иметь начальную пустую строку в первом примере.
Очевидным недостатком является то, что textwrap находится в стандартной библиотеке, а matplotlib - внешний модуль.
Некоторые компромиссы здесь ... функции dedent делают ваш код более читабельным, когда определяются строки, но требуют обработки позже, чтобы получить строку в пригодном для использования формате. В строках документации очевидно, что вы должны использовать правильный отступ, так как большинство использований строки документации выполнят требуемую обработку.
Когда мне нужна недлинная строка в моем коде, я нахожу следующий заведомо уродливый код, где я позволяю длинной строке выпасть из вмещающего отступа. Определенно терпит неудачу на «Красивое лучше, чем некрасивое.», Но можно утверждать, что это проще и более явно, чем альтернатива dedent.
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()