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

13 投票
4 回答
12547 浏览
提问于 2025-04-16 02:16

如果我有一行非常长的代码,是否可以把它接着写在下一行,比如:

 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 个回答

2

在Python中,可以把两个字符串直接连在一起,所以

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

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

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

这样你就不需要用+来把字符串连接起来了。不过,如果是要加一些不是字符串的内容,比如max(freq),那还是需要用+的。具体的可以参考字符串字面量连接。这样做效率稍微高一点,更重要的是更清晰,并且可以对字符串的某些部分进行注释,就像在Python文档中展示的那样。

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

撰写回答