我习惯用这种方式命名Python参数:
my_argument='foo'
如果我这样做有什么好处:
my_argument_='foo"
如PEP008推荐的那样?
尾随下划线必须有充分的理由,那么它是什么?
答案 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_
但这一次,它会返回每一列的系数,没有任何错误。这是如何使用这种对流的方式之一,它在不同的项目中可能意味着不同的东西。