Подтвердить что ты не робот

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&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:'
4b9b3361

Ответ 1

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

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-адреса

Ответ 2

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

Большинство синтаксических проблем, подобных этому, рассматриваются в PEP 8. Для ответа на этот вопрос вы можете обратиться к разделу "Макет кода".

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

От PEP-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:')

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

От PEP-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))

Ответ 3

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

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

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

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

и вам не понадобится +, чтобы связать строки вместе. Вам все равно понадобится добавить нелитературы, такие как max(freq), как описано в String Literal Concatenation. Это немного более эффективно, но, что более важно, более ясное и позволяет комментировать части строки, как показано в документации по Python.

Ответ 4

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

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:')