我不知道什麼是逐個對象(python)和引用調用之間的區別。正如我們在python中所知道的,一切都是一個對象,變量只是引用對象中的值的名稱。但它不是通過引用和按值呼叫。通常在python的call-by-sharing,逐個對象引用或逐個對象中調用它。但我不明白爲什麼它不能被稱爲例如使用C語言的引用調用,其中變量也不是對象,它們是引用對象中的值的名稱,或者我錯了嗎?每個對象和每個引用都有什麼不同?
回答
該文檔小心翼翼地避免使用這些術語,因爲它們在社區中使用不一致。據我所知,相同的調用機制被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)
其實我只是注意到,賦值是有史以來最糟糕的描述。 C++,C,Java,Javascript ...他們都通過參數,就像「通過賦值」一樣。 PHP和Perl想到的是例外... –
我不同意。對於一個Python程序員來說,「通過賦值調用」可以清楚地發現會發生什麼 - 尤其是因爲賦值在Python中的工作方式與在其他許多語言中的工作方式不同。術語/描述應該根據其對使用該語言的人的用處來判斷。 – timgeb
它不會告訴C如果有人問它如何工作。 –
- 1. 爲什麼每個javascript對象都有構造函數屬性?
- 2. jquery每個json對象什麼都不做
- 3. jquery每個都沒有迭代對象
- 4. 爲什麼每個體系結構的opensslconf.h都有所不同?
- 5. 每個輸出單位都有什麼不同?
- 6. 爲什麼。每個這裏都不行?
- 7. 等同於2個對象 - 每次都不同?
- 8. 如何指示NSIndexSet對象的索引?每個人都有
- 9. 爲什麼java中的每個類都是對象的子類?
- 10. 對於每個人都有一個getter
- 11. 每個JSpinner對象是否都有自己的Model對象?
- 12. 什麼時候應該使用每個線程同步對象?
- 13. 爲什麼每個應用程序都有一個JVM?
- 14. 爲什麼`Meteor.findOne()`每次都返回一個不同的ID?
- 15. 每個對象?
- 16. 每一個對象被引用
- 17. 在jQuery中引用對象每個
- 18. 每個引腳有不同的功能?
- 19. 每個Meteor流程都做了什麼?
- 20. GoJS TreeLayout對於每個孩子都有不同的級別
- 21. 如何創建一個容器,每個對象都有一個對象?
- 22. 在Java中比較兩個對象..每個對象都有兩個字段
- 23. 每個對象都應該有一個方法'addEventListener'嗎?
- 24. 每個視圖都有相同的webview
- 25. 每個聲明和每個聲明有什麼區別?
- 26. ,爲什麼引用每個名稱?
- 27. 對於每個不同的
- 28. eclipse調試器中的每個對象引用都有可能中斷嗎?
- 29. 爲什麼GHC爲每個線程都有一個堆棧?
- 30. 爲什麼每個JDK都帶有3個JRE?
c僅有*傳址值*。 Python只能*通過引用傳遞給對象*。順便說一句,他們都會匹配Ned Batchelder提出的「任務調用」,只不過這個任務在C語言中做了與Python不同的事情...... –