2017-09-03 88 views
-5

我不知道什麼是逐個對象(python)和引用調用之間的區別。正如我們在python中所知道的,一切都是一個對象,變量只是引用對象中的值的名稱。但它不是通過引用和按值呼叫。通常在python的call-by-sharing,逐個對象引用或逐個對象中調用它。但我不明白爲什麼它不能被稱爲例如使用C語言的引用調用,其中變量也不是對象,它們是引用對象中的值的名稱,或者我錯了嗎?每個對象和每個引用都有什麼不同?

+0

c僅有*傳址值*。 Python只能*通過引用傳遞給對象*。順便說一句,他們都會匹配Ned Batchelder提出的「任務調用」,只不過這個任務在C語言中做了與Python不同的事情...... –

回答

2

該文檔小心翼翼地避免使用這些術語,因爲它們在社區中使用不一致。據我所知,相同的調用機制被Java人稱爲「按價值調用」,由Ruby人稱爲「按參考調用」。

我認爲是Ned Batchelder提出了「通過賦值調用」這個術語 - 因爲當你調用一個函數時,這就是隱含的情況(編輯:在Python中!)。

考慮:

def foo(x, y): 
    return x + y 

a = [1, 2, 3] 
b = [4, 5, 6] 
foo(a, b) 

含蓄,foo不執行函數體的其餘部分之前如下:

x = a 
y = b 

這兩個任務。所以一旦你理解了任務 - 最重要的是,分配永遠不會複製數據 - 你理解函數調用。

相關鏈接:
Facts and Myths about Python Names and Values (video)
Facts and Myths about Python Names and Values (html)

+0

其實我只是注意到,賦值是有史以來最糟糕的描述。 C++,C,Java,Javascript ...他們都通過參數,就像「通過賦值」一樣。 PHP和Perl想到的是例外... –

+0

我不同意。對於一個Python程序員來說,「通過賦值調用」可以清楚地發現會發生什麼 - 尤其是因爲賦值在Python中的工作方式與在其他許多語言中的工作方式不同。術語/描述應該根據其對使用該語言的人的用處來判斷。 – timgeb

+0

它不會告訴C如果有人問它如何工作。 –

相關問題