【问题标题】:How to gracefully break up a long string如何优雅地打断长长的弦
【发布时间】:2013-12-20 11:14:36
【问题描述】:

看,我已经看到了这个网站上提供的许多与我的问题有关的答案。 [上述] 答案通常提供已经存在的示例,这些示例太基本而无济于事 - 至少对我而言。但是,嘿,也许我过于复杂了。

这是原始的长线:

    for i in range(2, l + 1):
        job_count_array["//form[@id='SubAvailSelectForm']/font/table[2]/tbody/tr[%d]/td[1]/small" % i] = sel.get_text("//form[@id='SubAvailSelectForm']/font/table[2]/tbody/tr[%d]/td[1]/small" % i)

这是我实施“长线延续”礼节的尝试(正如我在 2007 年发现的 pycon 讲义中所述,here):

    for i in range(2, l + 1):
        job_count_array["//form[@id='SubAvailSelectForm']/font/table[2]/ \
                        tbody/tr[%d]/td[1]/small" % i] = sel.get_text("/ \
                        /form[@id='SubAvailSelectForm']/font/table[2]/tb \
                        ody/tr[%d]/td[1]/small" % i)

我的尝试 (a) 是否会被解析器正确解释和/或 (b) 是否会被任何有帮助的贡献者做得更“漂亮”或更高效?谢谢。

【问题讨论】:

    标签: python implicit pep continuation long-lines


    【解决方案1】:

    我会选择以下两种选择之一:

    for i in range(2, l + 1):
        replace_index = "//form[@id='SubAvailSelectForm']/font/table[2]/tbody/tr[%d]/td[1]/small" % (i,)
        job_count_array[replace_index] = sel.get_text(replace_index)
    

    首先,您使用了两次相同的长字符串,因此使用replace_index 代替它。这使代码更短,并保证两者之间没有任何难以发现的小错别字。

    for i in range(2, l + 1):
        replace_index = ("//form[@id='SubAvailSelectForm']/"
                         "font/table[2]/tbody/tr[%d]/td[1]/small") % (i,)
        job_count_array[replace_index] = sel.get_text(replace_index)
    

    其次,您可以使用“括号内的字符串自动连接”技巧,而不是字符串的行尾转义。我发现这种方式更容易阅读。

    另外值得注意的是使用(%i,) 而不是%i 进行字符串格式化。在我过去证明将单个字符串格式化参数设置到元组中是有益的,因此将来添加其他参数更容易,而且字符串格式化参数的呈现方式保持一致也很好。

    【讨论】:

    • 连接字符串而不是使用一个跨越多行的长字符串也可以避免潜在的错误 - 长字符串 包括 用于将每一行与首先(不是换行符,除非您使用三引号字符串而不是转义符),而连接的字符串与您将其全部放在一行中的内容相同。
    • 我发现新的格式语法也有助于保持线条整洁。 foo = 'hello world {}' 然后是 print(foo.format(42))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多