所以我从我的python代码中看到了非常奇怪的行为,并且找不到我的问题的任何其他示例。从我读过的python中,函数只能访问全局或内部变量。但是,我在下面的代码片段中发现,即使变量“density”从未被函数返回并且未全局声明,两个print语句也会返回不同的结果。
def findHeight(density):
print density
height = integrateHeight(density, cutOff)
print density
return height
这是a **中真正的痛苦,因为它后来在脚本中搞乱了代码。
我使用的是python 2.7.6,我的函数定义如下:
def integrateHeight(data, cutOff):
# accumulate data values and rescale to fit interval [0,1]
# Calculate bin widths (first one is a different size from the others)
data[0,1] = -2*data[0,0]*data[0,1]
data[1:,1] = (data[2,0] - data[1,0])*data[1:,1]
# accumulate distribution and divide by the total
data[:,1] = np.cumsum(data[:,1]) / data[:,1].sum()
# Assign a default height value
height = data[0,0]
# store the first height,fraction pair
prev = data[0]
# loop through remaining height,fraction pairs
for row in data[1:]:
# check that the cut-off is between two values
if row[1] > cutOff >= prev[1]:
# Interpolate between height values
height = interpolate(cutOff, prev[::-1], row[::-1])
# exit the loop when the height is found
break
# store the current height,fraction value
prev = row
return height
这个特殊的脚本应该采用分布,累积它,并找到对应于累积分布的某一部分的高度。
答案 0 :(得分:3)
变量未被修改,传递给integrateHeight
的对象正在被修改。这个是正常的。如果您不希望integrateHeight
改变其输入,请以不改变其输入的方式编写它。为此,您可能需要在函数中复制它,或者在不改变对象的情况下找到执行计算的其他方法。