希望我不重複任何問題,但找不到...如何保持鍵參數的默認值不變? (python)
我試圖用相同的鍵參數多次運行一個函數。我明白爲什麼f
函數會更改x0
數組,但我不太明白爲什麼g
函數每次都有不同的參數(y0
是常量)。 我會很感激,如果任何人都可以解釋我的這種行爲,並給我一個提示如何實現我想要的(基本上在最後我想有== == 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
'y0.copy()被創建並返回一個新的數組的函數時'還評價。同一個數組將用於每個函數調用。 – mgilson
這不是重複的。這個問題有兩個部分,'x = x0'和'y = y0.copy()'。第一部分由前面的問題(OP已經理解)回答,但第二部分是新的。 –
@HansThen - 但'y0.copy()'只是返回一個用作默認參數的可變對象。如果有區別,它是_really_ minimal(恕我直言)。雖然,我不得不承認,當StackOverflow在我的vote_之後標記爲dupe時,我感到震驚。通常需要5 ... – mgilson