12

当变量嵌套好几级、名称相当长并且被分配相当长的值/表达式时,为变量分配值的首选样式是什么。

例如:

if this:
    if that:
        if here:
            if there:
                 big_variable['big_key']['big_value'] = another_big_variable_that_pushes_line_over_79_characters
                 other_thing = something

字符限制违规只是个位数,但我想清理我的代码,以便它尽可能忠实地遵循 PEP 8。我已经完成了以下操作,但我对 python 还是很陌生,我不确定这是否会让经验丰富的 python 程序员畏缩:

if this:
    if that:
        if here:
            if there:
                big_variable['big_key']['big_value'] = \
                    another_big_variable_that_pushes_line_over_79_characters
                other_thing = something

我的印象是续行字符有些禁忌;但是如果我正在使用这些大字典并且我无法在变量名的中间进行彻底的休息,我真的想不出比我拥有的更清洁的解决方案。

4

2 回答 2

20

我认为 Python 中的续行没有任何问题。但有时我更喜欢这个:

big_variable['big_key']['big_value'] =(
    another_big_variable_that_pushes_line_over_79_characters
)

它在长表达式中也很有用。

于 2014-03-26T22:33:17.137 回答
8

续行有点忌讳,但不是世界末日。我们必须始终努力编写代码,以便其他程序员能够理解我们在做什么。

使用续行字符\只是我们武器库中实现易读性目标的一个工具。

命名约定是另一个问题。正如达芬奇所说:“简单是终极的复杂。” 如果您可以使变量名称变小且易于理解,那么您就是老练;-)。只是说var1, var2, var3等太容易了。想出好名字是一项技能,需要努力。

您希望看到一个名为ChiefExecutiveOfficerOfCompanysNameor的变量CEOName吗?

如果您可以组合if语句,那么您的代码可以变得更加清晰。很有可能,如果你有一些大的层次结构if...else-if,那么你做错了什么(这是代码异味)。例如,您可以更改此:

if this:
    if that:
        if here:
            if there:

进入这个:

if this and that and here and there:

或者将这样的粗略逻辑扔进评估器函数中,如下所示:

if EvaluateConditions(<args>):

将代码分解成逻辑片段,并将这些片段放入函数中是另一种使事物可读的方法(我们只有这么多的 RAM,我们希望将整个函数都放入其中……人类并不擅长分页)

通过使用参数化函数或一些良好的设计 模式,避免复制和粘贴稍作更改的代码

于 2014-03-26T22:33:31.210 回答