适用于复杂单线的最佳蟒蛇风格

时间:2011-08-23 08:25:50

标签: python coding-style

我最近写了一个相当丑陋的单行,并且想知道将它分成多行是否更好的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 个答案:

答案 0 :(得分:19)

我的投票将基于可读性。我发现你的单行内容比多行示例更快消化。

只要它适合一个 eye-ful ,单行就很棒,并且它们共同执行一项不同的任务。

我个人认为:

def getlink(url):
    content = urllib.urlopen(url).readlines()  
    return content[425].split('"')[7]  

(现在,冒险进入downvote领域......)

您的评论栏对于不熟悉Python的人来说非常棒,但可以说,他们通过增加要消化的信息来降低可读性。读取代码的pythonista会很快理解你的单行,然后可能会继续阅读注释,以防有警告或边缘情况需要警告。

我不是说评论是邪恶的,只是冗长的评论会对可读性产生负面影响。例如。经典:x+=1 # increment x by 1

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

答案 1 :(得分:3)

我也发现表达式urllib.urlopen(url).readlines()[425].split('"')[7]比较容易理解。

但是,我更愿意:

def getlink(url):
    line425 = urllib.urlopen(url).readlines()[425]
    return line425.split('"')[7]

答案 2 :(得分:2)

对我来说,多行版本要好得多。使用多行代码,您可以分解逻辑并使用变量来存储中间输出。然后变量名允许我读取逻辑并查看输出所依赖的内容。在这种情况下,您也不必编写精心的评论。我发现在几个月之后阅读多行版本比在这种情况下阅读单行版本更容易。您发布的示例并不复杂,但为了保持一致性,我会将您的示例代码编写成多行。

答案 3 :(得分: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's version更容易阅读。

答案 4 :(得分:1)

你的单行不是那种淫秽(至少对我而言),加上你添加评论是件好事。

编写软件时,请在8个月左右的时间内再想一想,再看一下这段代码。它应该是可读的,就像你今天所看到的那样。

答案 5 :(得分:1)

多行版本是更好的Python风格。它更易于阅读,更易于理解,也更易于修改。

这是Python - 简单就是好! :)