【问题标题】:Indentation appears in the output string when broken it over multiple lines将输出字符串拆分为多行时,缩进会出现在输出字符串中
【发布时间】:2022-01-08 00:57:41
【问题描述】:

我有很大的f-string,为了代码的可读性,我正在刹车(见下文)。 但是当我打印(打印到文件,它是String.IO 对象)字符串时,我得到每个新行前的缩进(第一行除外),我不想要那个(我的IDE 是vscode)。 当取下面相同的f-string 到python shell 解释器(REPL)时,输出字符串是正确的。

def foo():
    ml.append(f"""
    #define {ip}_{mtype}_{secname}_{fieldname}_MASK (MASK({H},{L}))
    #define {ip}_{mtype}_{secname}_{fieldname}_START_BIT ({fieldsb})\n""")

输出文件如下所示:

#define QM_MEM_CBTIRDY_LENGTH (0x40)                           //good line
        #define QM_MEM_CBTIRDY_DATA_MASK (GENMASK(31,0))       //bad line (with indentation)
        #define QM_MEM_CBTIRDY_DATA_START_BIT (0)

我已经通过删除每个新行之间的缩进来修复它(但它的丑陋因为字符串具有相同的函数定义缩进级别,这很丑陋)

def foo():
    ml.append(f"""
#define {ip}_{mtype}_{secname}_{fieldname}_MASK (MASK({H},{L}))
define {ip}_{mtype}_{secname}_{fieldname}_START_BIT ({fieldsb})\n""")

我怎样才能去掉最终字符串中的这些缩进字符?

【问题讨论】:

    标签: python-3.x f-string


    【解决方案1】:

    三引号(多行)字符串应该保留格式,这就是您获得这些标识的原因。

    您可以改用串联:

    ml.append(f"#define {ip}_{mtype}_{secname}_{fieldname}_MASK (MASK({H},{L}))\n"
              f"#define {ip}_{mtype}_{secname}_{fieldname}_START_BIT ({fieldsb})\n")
    

    或者如果你仍然喜欢多行字符串,你可以trim them in a similar way to docstrings

    【讨论】:

    • 我认为这里不需要 + 操作。 Python 将在不使用 + 的情况下连接字符串。相关答案可见here
    • @Safwan,你是对的。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2017-02-26
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多