Отступы при использовании многострочных строк - PullRequest
0 голосов
/ 29 января 2019

Мне иногда нужно использовать многострочные строки, но во вложенном блоке.Это работает, но читаемость действительно плохая:

CONDITION1 = CONDITION2 = CONDITION3 = True

if CONDITION1:
    if CONDITION2:
        s = """jkljkj
dfkjslfds
sqjdlqkj"""
    elif CONDITION3:
        s = """azeazea
azeoiuaez
azeytzae
azetzae"""

Использование:

if CONDITION1:
    if CONDITION2:
        s = """jkljkj
               dfkjslfds
               sqjdlqkj"""

(как предложено в Pythonic способ создания длинной многострочной строки ) не является опцией, потому что строка s будет иметь вид:

jkljkj
               dfkjslfds
               sqjdlqkj

с нежелательными левыми пробелами.

Вопрос: как использовать многострочные строки во вложенных блоках схорошая читабельность?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Оберните строку в вызовом inspect.cleandoc, и он очистит ее так же, как очищаются строки документов (удаляя начальные и конечные пробелы и любые уровни общего отступа).

>>> import inspect
>>> s = """jkljkj
...        dfkjslfds
...        sqjdlqkj"""
...
>>> print(s)
jkljkj
       dfkjslfds
       sqjdlqkj
>>> s = inspect.cleandoc(s)
>>> print(s)
jkljkj
dfkjslfds
sqjdlqkj

textwrap.dedent также является опцией, но она более уродлива, поскольку требует, чтобы вы не помещали текст в первую строку и явно использовали символ продолжения строки, чтобы каждыйСтрока (не только вторая и последующие) имеет одинаковые начальные отступы:

>>> print(textwrap.dedent('''\
...                       The^backslash is a pain
...                       so I don't recommend this approach
...                       '''))
The^backslash is a pain
so I don't recommend this approach

Обратите внимание, что хотя блоки кода в SO не показывают это должным образом, dedent оставил пустую последнюю строку (изпоместив закрывающий ''' на отдельную строку), где cleandoc удалил бы его.

0 голосов
/ 30 января 2019

Вы пытались использовать '\'.Например:

if CONDITION1:

   if CONDITION2:

       s = "jkljkj "\
           "dfkjslfds "\
           "sqjdlqkj"
...