如何保持key参数的默认值不变? (蟒蛇)

时间:2014-05-13 20:16:35

标签: python numpy

希望我没有重复任何问题,但无法找到......

我试图多次使用相同的键参数运行一个函数。我理解为什么f函数会更改x0数组,但我并不真正理解为什么g函数每次都会采用不同的参数(y0为常量) 。 如果有人能解释我这个行为并给我一个提示如何实现我想要的东西(基本上最后我想要y == np.array([0,30,0])),我将感激不尽。

import numpy as np

x0 = np.zeros(3)
y0 = np.zeros(3)

def f(i, x = x0):
    x[1] += i
    return x

def g(i, y = y0.copy()):
    print "y that goes to g (every time is different) \n", y
    y[1] += i
    return y

print "x0 before f \n" ,x0
x = f(5)
print "x0 after f is the same as x  \n", x0, "\n", x

print "y0 before g \n" ,y0
for i in [10, 20, 30]:
    y = g(i)
print "y0 after g doe not change, but y is NOT as I would expect! \n", y0, "\n", y

2 个答案:

答案 0 :(得分:4)

定义函数时,函数的默认参数仅计算一次。这意味着您的函数定义等同于:

y0_ = y0.copy()
def g(i, y = y0_):
    print "y that goes to g (every time is different) \n", y
    etc

这解释了为什么你的y参数每次都会改变。

答案 1 :(得分:0)

"但我真的不明白为什么g函数每次都采用不同的参数"

def g(i, y = y0.copy()):
    ....

你的y0是常数,但是当你调用g()函数时,你是第一次用不同的引用创建y0的副本,所以你不能用函数g()改变y0。只需改变

y = y0.copy() 

y=y0