1

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

这是原始的长线:

    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 讲义所述):

    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) 是否会被任何有帮助的贡献者做得更“漂亮”或更高效?谢谢你。

4

1 回答 1

4

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

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字符串格式。在我过去,将单个字符串格式化参数设置到元组中已被证明是有益的,因此将来添加其他参数更容易,而且字符串格式化参数的呈现方式保持一致也很好。

于 2013-12-04T05:20:36.973 回答