python - 使用多行字符串时的缩进

我有时需要使用多行字符串,但在嵌套 block 中。这行得通,但可读性真的很差:

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

有多余的空格。

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

最佳答案

将字符串包裹在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 会删除它。

https://stackoverflow.com/questions/54429373/

相关文章:

google-maps - 如何使 flutter google map 中的标记随相机而不是 ma

r - 如何在绘图中制作垂直线段?

python - 获取数组的最后一个索引的时间复杂度是多少?

spring-boot - 斯波克测试 : Too few invocation

python-3.x - Pandas df.to_sql 不适用于红移

firebase - 限制经过身份验证的用户访问 Firestore

ruby-on-rails - 使用 RubyZip 生成文件并下载为 zip

angular - 如何从测试代码中触发 Angular Material MatSelect 上的

c# - 如何生成包含 JSON 结构的要下载的文件?

angular - NGRX Store adapter.updateone 不更改属性以进行更改检