Как я должен записать очень длинные строки кода?

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

 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:'
13
задан codeforester 1 August 2019 в 00:59
поделиться

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

21
ответ дан 1 December 2019 в 18:54
поделиться

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

Большинство синтаксических проблем, подобных этой, рассматривается в 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:')

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

From 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))
16
ответ дан 1 December 2019 в 18:54
поделиться

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

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

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

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

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

2
ответ дан 1 December 2019 в 18:54
поделиться

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

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:') 
1
ответ дан 1 December 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: