Python: как мне написать очень длинные строки кода? - PullRequest
12 голосов
/ 04 августа 2010

если у меня очень длинная строка кода, можно ли продолжить ее на следующей строке, например:

 url='http://chart.apis.google.com/chart?chxl=1:|0|10|100|1,000|10,000|'
+ '100,000|1,000,000&chxp=1,0&chxr=0,0,' +
      max(freq) + '300|1,0,3&chxs=0,676767,13.5,0,l,676767|1,676767,13.5,0,l,676767&chxt=y,x&chbh=a,1,0&chs=640x465&cht=bvs&chco=A2C180&chds=0,300&chd=t:'

Ответы [ 4 ]

21 голосов
/ 04 августа 2010

Я бы написал так:

url=('http://chart.apis.google.com/chart?chxl=1:|0|10|100|1,000|10,000|'
     '100,000|1,000,000&chxp=1,0&chxr=0,0,%(max_freq)s300|1,0,3&chxs=0,676767'
     ',13.5,0,l,676767|1,676767,13.5,0,l,676767&chxt=y,x&chbh=a,1,0&chs=640x465'
     '&cht=bvs&chco=A2C180&chds=0,300&chd=t:'%{'max_freq': max(freq)})

Обратите внимание, что + не требуется для присоединения строк. Это лучше, потому что строки объединяются во время компиляции, а не во время выполнения.

Я также вложил %(max_freq)s в вашу строку, это подставляется из dict в конце

Также проверьте urllib.urlencode(), если вы хотите упростить обработку URL-адресов

16 голосов
/ 04 августа 2010

Где искать помощь в будущем

Большинство подобных проблем синтаксиса решается в PEP 8 . Для ответа на этот вопрос вы можете обратиться к разделу «Разметка кода».

Предпочтительный способ: используйте (), {} & []

Из ПКП-8:

Предпочтительный способ переноса длинных строк - использование подразумеваемой строки Python. продолжение внутри скобок, скобок и скобок. При необходимости вы можно добавить лишнюю пару скобок вокруг выражения ...

Это означает, что ваш пример будет выглядеть так:

url= ('http://chart.apis.google.com/chart?chxl=1:|0|10|100|1,000|10,000|' +
      '100,000|1,000,000&chxp=1,0&chxr=0,0,' +
      max(freq) + 
      '300|1,0,3&...chco=A2C180&chds=0,300&chd=t:')

Альтернативный способ: Используйте \

Из ПКП-8:

... но иногда использование обратной косой черты выглядит лучше. Убедитесь, что отступ для продолжения строки надлежащим образом.

url = 'http://chart.apis.google.com/chart?chxl=1:|0|10|100|1,000|10,000|' + \
      '100,000|1,000,000&chxp=1,0&chxr=0,0,' + \ 
       max(freq) + \
      '300|1,0,3&...chco=A2C180&chds=0,300&chd=t:'

Как избежать конкатенации

Форматирование строки

В этом случае у нас есть только одна вещь, которую мы хотели бы изменить в URL: max(freq). Чтобы эффективно вставить это в новую строку, мы можем использовать метод format с числовыми или именованными аргументами:

url = "http://...{0}.../".format(max(freq))
url = "http://...{max_freq}.../".format(max_freq=max(freq))
2 голосов
/ 04 августа 2010

Python объединяет две строковые литералы вместе, поэтому

>>> s = "abc" "def"
>>> s
'abcdef'

, но это не сработает, если они в двух строках, потому что Python не знает, что следующая строка является частью команды.Чтобы решить эту проблему, вы можете использовать обратную косую черту или скобки.

>>> s = ("hello, world"
"!")
>>> s
'hello, world!'

, и вам не понадобится + для соединения строк.Он по-прежнему понадобится для добавления нелитералов, таких как max(freq), как описано в Строковая конкатенация букв .Это немного более эффективно, но, что более важно, более четко и позволяет комментировать части строки, как показано в связанной документации Python.

1 голос
/ 04 августа 2010

Да, используйте обратную косую черту \, например:

url='http://chart.apis.google.com/chart?chxl=1:|0|10|100|1,000|10,000|' + \
'100,000|1,000,000&chxp=1,0&chxr=0,0,' + \ 
      max(freq) + '300|1,0,3&chxs=0,676767,13.5,0,l,676767|1,676767,13.5,0,l,676767&chxt=y,x&chbh=a,1,0&chs=640x465&cht=bvs&chco=A2C180&chds=0,300&chd=t:' 

Или вы можете заключить выражение в скобки ():

url=('http://chart.apis.google.com/chart?chxl=1:|0|10|100|1,000|10,000|' +
'100,000|1,000,000&chxp=1,0&chxr=0,0,' +  
      max(freq) + '300|1,0,3&chxs=0,676767,13.5,0,l,676767|1,676767,13.5,0,l,676767&chxt=y,x&chbh=a,1,0&chs=640x465&cht=bvs&chco=A2C180&chds=0,300&chd=t:') 
...