使用多行字符串时的缩进

时间:2019-01-29 20:51:24

标签: python string nested code-readability multilinestring

有时我需要使用多行字符串,但是要使用嵌套块。可以,但是可读性很差:

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 way to create a long multi-line string中的建议)是不可选项,因为字符串s为:

jkljkj
               dfkjslfds
               sqjdlqkj

带有多余的左空格。

问题:如何在嵌套块中使用具有良好可读性的多行字符串?

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用'\'。例如:

if CONDITION1:

   if CONDITION2:

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

答案 1 :(得分:1)

将字符串包装在a call to 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会删除它。