我该如何编写很长的代码行?
如果我有一行非常长的代码,是否可以把它接着写在下一行,比如:
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()
。