2013-12-04 4 views
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) 

Вот моя попытка реализации «ярусного продолжение» этикет (как указано на PyCon раздаточный материал с 2007 года, что я нашел 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) 

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

ответ

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

+0

Консолидация строк вместо использования одного длинного, натянутого на несколько строк, также позволяет избежать потенциальной ошибки - длинная строка * включает в себя * все пробелы, используемые для выравнивания каждой строки с первым (только не с новыми линиями, если вы не используете строка с тройным кавычком вместо экранов), в то время как конкатенированное имеет такое же содержимое, как если бы вы помещали все это в одну строку. – lvc

+1

Я считаю, что синтаксис нового формата также помогает поддерживать четкие линии. 'foo = 'hello world {}'', а затем 'print (foo.format (42))' –