13

如果我有很长的代码行,是否可以在下一行继续,例如:

 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

4 回答 4

21

我会这样写

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 处理更简单

于 2010-08-03T23:37:11.013 回答
17

将来在哪里寻求帮助

像这样的大多数语法问题都在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))
于 2010-08-03T23:29:43.447 回答
2

Python 将两个字符串文字组合在一起,所以

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

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

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

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

于 2010-08-03T23:30:50.810 回答
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) + '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:') 
于 2010-08-03T23:23:04.300 回答