36

我真的很喜欢遵循 ​​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 更糟糕。

最佳做法是什么?

多年后编辑

不要对齐。迟早会出现一个更长的新变量,您将不得不在这里和那里按空格键一段时间,直到一切看起来都恢复正常。不值得。

多年后编辑 只需使用像黑色这样的代码格式化程序并将其用作预提交和/或您的 CI。然后忘记这个。

4

3 回答 3

18

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

我绝对不建议您每次要使用命名参数调用函数时都创建字典。这很浪费。我不明白为什么你原来的some_func电话不起作用。如果函数调用太长且笨拙,我肯定会将它们分成几行。但我不对齐它们。我想推荐的原因是因为随着时间的推移正确保持所有间距可能会变得非常痛苦,并且共识是可维护性而不是美观的增益。

如果您正在编写自己的代码,请保持一致,谁在乎?PEP8 是指导方针,而不是法律。

于 2012-11-21T16:41:51.830 回答
2

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

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

恕我直言 - 这不太可读(如果它是有效的语法而不引用键),如果我碰巧想添加some_longer_named_varible,我真的不确定我是否想重新调整其他所有内容的间距。

我想你应该咬紧牙关,我害怕。

于 2012-11-21T16:40:57.573 回答
2

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

var1        = 1234
var2        = 54
longer_name = 'hi'

对此:

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

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

于 2012-11-21T16:50:25.450 回答