Как изящно разорвать длинную струну

Послушайте, я видел многие ответы на этом сайте, которые касаются аспектов моего вопроса. [Вышеупомянутые] ответы обычно содержат уже существующие примеры, которые слишком просты, чтобы быть полезными - по крайней мере, для меня. Но послушайте, может я слишком усложняю это.

Вот оригинальный ярус:

    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)

Вот моя попытка реализовать этикет "продолжения длинной очереди" (как указано в раздаточном материале pycon 2007 года, который я нашел здесь):

    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)

Будет ли моя попытка (а) правильно интерпретирована синтаксическим анализатором и / или (б) будет ли сделана более «красивой» или эффективной для каких-либо полезных участников? Спасибо.


person philthy    schedule 04.12.2013    source источник


Ответы (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 для форматирования строки. В моем прошлом оказалось полезным настроить один аргумент форматирования строки в кортеж, чтобы было проще добавлять дополнительные аргументы в будущем, плюс приятно быть последовательным в том, как представлены аргументы форматирования строки.

person sberry    schedule 04.12.2013
comment
Объединение строк вместо использования одной длинной строки, расположенной на нескольких строках, также позволяет избежать потенциальной ошибки - длинная строка включает все пустое пространство, используемое для выравнивания каждой строки с первой (только не символы новой строки, если только вы используете строку с тройными кавычками вместо escape-символов), а объединенная строка имеет такое же содержимое, как если бы вы поместили все это в одну строку. - person lvc; 04.12.2013
comment
Я считаю, что новый синтаксис формата также помогает сохранять аккуратность строк. foo = 'hello world {}' затем позже print(foo.format(42)) - person Burhan Khalid; 04.12.2013