【发布时间】:2014-03-11 23:13:24
【问题描述】:
我想实现一个函数,允许“就地”重新分配其参数的值。
例如,一个函数将增加参数 x 和减少参数 y。 (这只是一个简单的说明示例 - 动机是 X 和 Y 实际上是大型数据帧的单个元素;它们的表达式很笨拙;并且此操作将经历多次迭代。)
def incdec(x,y,d):
x += d
y -= d
理想情况下,这将运行为:
X = 5; Y = 7; d = 2
incdec(X,Y,d)
发现现在的值是 X = 7 和 Y = 5。但它当然不会那样工作 - 我想知道为什么?
【问题讨论】:
-
你不能在函数中重新绑定这些变量,不。
-
这对于您给定的示例是不可能的,因为函数无法重新绑定传递给它的变量。当然,您仍然可以更改传递给您的函数的任何对象内部的引用,因此如果您更详细地描述它,可能会为您的实际用例解决一些问题。
-
如果你有,比如说,列表作为输入,这应该可以工作(即
def incedec(x,y,d): x[0] += d; x[0] += d;whereX=[5]; Y=[7]。这都是关于可变和不可变数据类型的。 -
您尝试实施的方法至少有两种解决方法;写了一个简短的要点作为答案:gist.github.com/miku/9497430
-
如果你真的有一个数据框或 numpy 数组,是的。正如你向他们展示的那样,不。如果您可以将您的问题更新为 numpy,那将有所帮助。