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

12
2017-08-03 23:21


起源


该函数是否调用 max(freq) 返回一个字符串?如果不是,您可能希望首先将其转换为字符串或使用字符串格式。 - Muhammad Alkarouri
可能重复 用Python包裹长行 - Felix Kling


答案:


我会这样写的

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() 如果你想让你的网址处理更简单


21
2017-08-03 23:37





今后在哪里寻求帮助

像这样的大多数语法问题都在处理中 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))

16
2017-08-03 23:29



你需要使用吗? + \  或者你可以使用 \ ? - Nick T


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

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

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

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

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


2
2017-08-03 23:30





是的,使用反斜杠 \,像这样:

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
2017-08-03 23:23



请注意 + 如果您只是附加字符串,则不需要。就像是 'foo' + 'bar' 相当于 'foo' 'bar' - Wolph
-1反斜杠是丑陋和邪恶的。如果你在反斜杠后不小心有空格,你就得到了 SyntaxError: unexpected character after line continuation character。加上是邪恶的 - 它在运行时进行评估。 - John Machin