Python函数意外地修改了外部函数中的变量

时间:2016-01-28 16:40:57

标签: python function scope

所以我从我的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

这个特殊的脚本应该采用分布,累积它,并找到对应于累积分布的某一部分的高度。

1 个答案:

答案 0 :(得分:3)

变量未被修改,传递给integrateHeight对象正在被修改。这个是正常的。如果您不希望integrateHeight改变其输入,请以不改变其输入的方式编写它。为此,您可能需要在函数中复制它,或者在不改变对象的情况下找到执行计算的其他方法。