Python命名中尾随下划线的优点是什么?

时间:2014-01-12 13:30:28

标签: python namespaces

我习惯用这种方式命名Python参数:

my_argument='foo'

如果我这样做有什么好处:

my_argument_='foo" 

如PEP008推荐的那样?

尾随下划线必须有充分的理由,那么它是什么?

4 个答案:

答案 0 :(得分:14)

它在PEP中给出了什么:它允许你使用原本可能是Python关键字的东西。

as_
with_
for_
in_

答案 1 :(得分:8)

PEP8确实推荐此命名约定,否则会与关键字冲突的名称除外。 my_argument显然不会发生冲突,因此没有理由使用下划线而PEP8不建议您这样做。

答案 2 :(得分:2)

通常这样的命名惯例在python中没有任何经验目的(即除了避免关键词之间的冲突,它们不会做任何特别的事情)。例如,您不会为变量class命名吗?您可以将其命名为class_,以避免与内置关键字冲突。

答案 3 :(得分:2)

这个约定没有任何好处,但在不同的项目中可能有特殊的含义。例如在scikit-learn中,就意味着在调用fit()后,带有下划线的变量可以有值。

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.coef_
AttributeError: 'LinearRegression' object has no attribute 'coef_'

在上面这段代码中,当您尝试获取 coef_ 对象的 lr 属性时,您将得到一个 AttributeError,因为它没有被创建,因为 fit 没有被调用

lr = LinearRegression()
lr.fit(X, y)
lr.coef_

但这一次,它会返回每一列的系数,没有任何错误。这是如何使用这种对流的方式之一,它在不同的项目中可能意味着不同的东西。