我应该如何编写很长的代码行?

2024-05-20 15:45:43 发布

您现在位置: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:'

Tags: 代码comhttpurlgooglechartmaxapis
3条回答

Python将两个字符串文字组合在一起,因此

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

但是如果它们在两行上,那就不起作用,因为Python不知道下一行是命令的一部分。要解决这个问题,可以使用反斜杠或方括号。

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

您不需要+将字符串连接在一起。如String Literal Concatenation中所述,您仍然需要它来添加max(freq)等非文字。这稍微有点效率,但更重要的是更清晰,并支持注释部分字符串,如链接的Python文档所示。

今后在哪里寻求帮助

像这样的大多数语法问题都在PEP 8中处理。有关此问题的答案,请参阅“代码布局”一节。

首选方法:使用(){}&;[]

来自PEP-8:

The preferred way of wrapping long lines is by using Python's implied line continuation inside parentheses, brackets and braces. If necessary, you can add an extra pair of parentheses around an expression...

这意味着您的示例希望:

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:

...but sometimes using a backslash looks better. Make sure to indent the continued line appropriately.

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

我会这样写的

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替换而来的

如果您想简化url处理,也可以查看^{}

相关问题 更多 >