Еще несколько опций. В 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 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()