我遇到了一个功能,但不太了解它。我不确定这是一个约定还是有意义。 _p
是什么,_p
在哪里进入函数。如果你能在这里给我一些关于for循环的解释,我将不胜感激。
def contraction_mapping(S, p, MF, params, beta=0.75, threshold=1e-6, suppr_output=False):
'''
Initialization of the state-transition matrices:
describe the state-transition probabilities if the maintenance cost is incurred,
and regenerate the state to 0 if the replacement cost is incurred.
'''
ST_mat = np.zeros((S, S))
p = np.array(p)
for i in range(S):
for j, _p in enumerate(p):
if i + j < S-1:
ST_mat[i+j][i] = _p
elif i + j == S-1:
ST_mat[S-1][i] = p[j:].sum()
else:
pass
R_mat = np.vstack((np.ones((1, S)),np.zeros((S-1, S))))
答案 0 :(得分:2)
有关许多python样式约定的详细信息,请参阅PEP8。特别是,您可以在此处找到单个前导下划线的描述:
https://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles
_single_leading_underscore:弱“内部使用”指标。例如。来自M import *不会导入名称以。开头的对象 下划线。
在上面的循环中,这有点滥用,因为他们只使用p
来避免与现有名称_p
发生冲突。这些变量名称显然不是很明显。 p
是枚举提供的数组项,而p
也是整个数组(本地覆盖传入的原始pass
参数)。
作为旁注,循环本身有点笨拙,可以简化和优化(主要是使用更好的范围代替{{1}},并避免重复重新计算总和)。