复杂单行代码的最佳Python风格

13 投票
6 回答
1726 浏览
提问于 2025-04-17 00:10

我最近写了一段看起来很丑的单行代码,想知道把它拆成多行写是不是更符合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

当然,这一切都取决于代码的目的和受众。

撰写回答