def f(x):
x=x/5.
return x
def g(x):
x/=5.
return x
x_var = np.arange(5,dtype=np.double)
f(x_var)
print x_var
g(x_var)
print x_var
Output:
[ 0. 1. 2. 3. 4.]
[ 0. 0.2 0.4 0.6 0.8]
這種行爲有點奇怪,我一直認爲x/= 5。相當於x = x/5。 。但顯然,g(x)函數不會在/ =操作中創建新的引用。任何人都可以爲此提供解釋嗎?numpy自我分裂的意外行爲
感謝您的解釋,我找不到可能導致我期待此行爲的文檔。 – bluecat 2013-04-09 16:44:07
這不是一個numpy問題,它是一個通過引用對象傳遞的問題。所有'__i * __'的默認實現都是在可能的情況下進行操作,請閱讀[docs](http://docs.python.org/reference/datamodel.html#object.__iadd__)。將一個Python列表傳遞給一個函數def f(a):a * = 3;返回a',它會修改您調用它的原始對象,而不是簡單地返回修改後的副本。 – Jaime 2013-04-09 16:52:00
謝謝,這是我正在尋找的文檔參考。所以如果可能的話,它應該在原地進行操作。如果__i * __不可用,它將默認爲正常的__ * __操作。 – bluecat 2013-04-09 17:03:15