Python的赋值对齐(样式)

时间:2012-11-21 16:34:39

标签: python coding-style pep8

我非常喜欢遵循PEP 8中指定的样式标准。我有一个自动检查它的linter,因此我的代码肯定更好。

PEP 8中只有一点,E251& E221感觉不太好。来自JavaScript背景,我曾经将变量赋值对齐如下:

var var1        = 1234;
    var2        = 54;
    longer_name = 'hi';

var lol = {
    'that'        : 65,
    'those'       : 87,
    'other_thing' : true
};

在我看来,这大大提高了可读性。问题是,PEP 8不推荐这样做。对于词典,并不是那么糟糕,因为冒号后允许空格:

dictionary = {
   'something':        98,
   'some_other_thing': False
}

我可以在没有对齐的情况下“生活”变量赋值,但我完全不喜欢的是不能在函数调用中传递命名参数,如下所示:

some_func(length=      40,
          weight=      900,
          lol=         'troll',
          useless_var= True,
          intelligence=None)

所以,我最终做的是使用字典,如下所示:

specs = {
    'length':       40,
    'weight':       900,
    'lol':          'troll',
    'useless_var':  True,
    'intelligence': None
}

some_func(**specs)

或只是简单地

some_func(**{'length':       40,
             'weight':       900,
             'lol':          'troll',
             'useless_var':  True,
             'intelligence': None})

但我觉得这项工作比忽略PEP 8 E251 / E221更糟糕。

最佳做法是什么?

多年后编辑

不要对齐。迟早会出现一个更长的新变量,你必须在这里和那里停留一段时间,直到一切看起来都很好。不值得。

3 个答案:

答案 0 :(得分:15)

最佳做法是主观的,但最常见的做法是坚持PEP8。

我绝对不建议每次要使用命名参数调用函数时创建字典。那太浪费了。我不明白为什么原来的some_func电话不起作用。如果它们变得太长而且不实用,我肯定会将我的函数调用分解为行。但我没有调整它们。我认为推荐的原因是因为随着时间的推移正确地保持所有间距会变得非常痛苦,并且共识是对可靠性的可维护性的可维护性。

如果您正在处理自己的代码,请调整一下,谁在乎呢? PEP8是一个指导原则,而非法律。

答案 1 :(得分:2)

  

所以,我最终做的是使用字典,如下所示:

specs = {
    length:      40,
    weight:      900,
    lol:         'troll',
    useless_var: True,
    intelligence:None
}

恕我直言 - 这是不太可读(如果它没有引用键是有效的语法),如果我碰巧想添加some_longer_named_varible,我真的不确定我是否想要重新隔开其他一切。

我认为你应该只是咬紧牙关。

答案 2 :(得分:1)

我建议坚持使用PEP8。如果您需要更改其中一个变量的名称会发生​​什么?自动重构工具将改变这一点:

var1        = 1234
var2        = 54
longer_name = 'hi'

到此:

var1        = 1234
var2        = 54
even_longer_name = 'hi'  # not aligned any more!

你最终会为自己做更多工作以保持一致。