使用多行字符串时的缩进
Indentation when using multi-line strings
我有时需要使用多行字符串,但在嵌套块中。这行得通,但可读性真的很差:
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
有不需要的左边空格。
问题:如何在嵌套块中使用多行字符串且可读性好?
您是否尝试过使用“\”。例如:
if CONDITION1:
if CONDITION2:
s = "jkljkj "\
"dfkjslfds "\
"sqjdlqkj"
将字符串包裹在 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
也是一个选项,但它更难看,因为它要求您在第一行不放置任何文本,并明确使用续行符以确保 every 行(不仅仅是第二行及以后)具有相同的前导缩进:
>>> 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
会删除它。
我有时需要使用多行字符串,但在嵌套块中。这行得通,但可读性真的很差:
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
有不需要的左边空格。
问题:如何在嵌套块中使用多行字符串且可读性好?
您是否尝试过使用“\”。例如:
if CONDITION1:
if CONDITION2:
s = "jkljkj "\
"dfkjslfds "\
"sqjdlqkj"
将字符串包裹在 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
也是一个选项,但它更难看,因为它要求您在第一行不放置任何文本,并明确使用续行符以确保 every 行(不仅仅是第二行及以后)具有相同的前导缩进:
>>> 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
会删除它。