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

次の2つの選択肢のいずれかを使用します。

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)

まず、同じ長い文字列が 2 回使用されているため、代わりに使用replace_indexします。これにより、コードが短くなり、2 つの間に違いがある小さな、見つけにくいタイプミスがないことが保証されます。

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 に答える