复杂单行代码的最佳Python风格
我最近写了一段看起来很丑的单行代码,想知道把它拆成多行写是不是更符合Python的风格,还是就留作注释的单行代码比较好。我查了一下PEP 8,但里面没有提到这个问题。
这是我写的代码:
def getlink(url):
return(urllib.urlopen(url).readlines()[425].split('"')[7])
# Fetch the page at "url", read the 426th line, split it along
# quotes, and return the 8th quote delimited section
那像这样写会不会更好呢?:
def getlink(url):
url_file = urllib.urlopen(url)
url_data = url_file.readlines()
line = url_data[425]
line = line.split('"')
return line[7]
或者说,介于两者之间的写法呢?
6 个回答
2
多行的写法能更好地传达意思,而一行的写法就让人不容易理解。
我这样理解:
def getlink(url):
url_file = ...
url_data = ...
line = url_data[425]
... = ... .split('"')
return line[7]
这意味着我可以更快更轻松地找到重要的部分,而不用在一个混乱的长表达式中翻找:
- 一般的调用,比如
urlopen()
和readlines()
(这对于一个叫getlink(url)
的函数来说是显而易见的) - 还有一些更具体的部分(比如
url_data[425]
和line[7]
)。
不过,Shawn Chin的写法更容易阅读。
3
我觉得这个表达式 urllib.urlopen(url).readlines()[425].split('"')[7]
还是挺容易理解的。
不过,我更喜欢:
def getlink(url):
line425 = urllib.urlopen(url).readlines()[425]
return line425.split('"')[7]
19
我觉得投票应该看代码的可读性。我觉得你的单行代码比多行代码更容易理解。
单行代码很好,只要它能在一个视线范围内看完,而且每行代码都完成一个明确的任务。
就我个人而言,我会这样写:
def getlink(url):
content = urllib.urlopen(url).readlines()
return content[425].split('"')[7]
(现在,准备进入负面评价的领域...)
你的注释块对不熟悉Python的人来说很不错,但可以说,它们通过增加需要理解的信息量,降低了可读性。一个熟悉Python的人看了你的单行代码会很快明白,但他们可能还是会继续看注释,以防里面有需要注意的特殊情况。
我并不是说注释不好,只是冗长的注释可能会对可读性产生负面影响。例如,经典的例子是:x+=1 # 将x加1
当然,这一切都取决于代码的目的和受众。