多年來,我一直接觸C/C++/Java的語法,Python變量的定義方式讓我感到困惑。任何人都可以描述q中提到的三種不同之處嗎?Python:全局變量與前綴爲「self。」的變量與局部變量之間有什麼區別?
回答
self
作品就像this
從C++和Java。您將獲得一個對象的引用,然後您可以使用.
運算符(C++中的->
)訪問該對象。
在Python訪問實例變量的唯一方法是通過明確地self
。實例變量是而不是與本地或全局變量位於相同的「正常」範圍內。
嘿,這是否意味着你*無法*根據上下文*使用local/global描述實例變量,或者它們可以是* local *或* global? – 2011-12-26 21:24:58
@KaitlynMcmordie:在python中,如果你執行'a = 10',你總是設置一個名爲'a'的局部變量。在C++中,執行相同的操作可能會設置一個局部變量或一個實例變量,這取決於如何聲明'a'。在Python中獲取/設置一個intance變量的唯一方法是通過self:'self.a = 10' – hugomg 2011-12-26 21:28:11
我仍然感到困惑,因爲名稱「instance」變量似乎是矛盾的...如果實例變量被更新在至少一個實例化已經修改它的\ *所有\ *運行時實例化的時候,是不是更適合稱它爲「實例無關」變量?或者爲什麼不把它稱爲一個靜態變量,因爲它基本上看起來就是這樣... – 2011-12-26 21:32:39
全局變量就是這樣 - 一個變量,全局可訪問的。局部變量是隻能被當前範圍訪問的變量,例如單個函數定義中使用的臨時變量。實例變量(例如:當使用前綴self.
時)是與對象的特定實例關聯的數據。當然,您也可以使用object.x
來引用對象之外的實例對象,其中object
是對該對象的引用。
如果一個變量與self
前綴,它既不是本地還是全球性的。它是對象特定實例的組成部分。粗略地說,實例變量表示特定對象的屬性。
在以下示例中,lx
是一個局部變量,局部的方法greet
。 gx
是一個全局變量,可以在模塊的任何位置訪問,ix
是一個實例變量,可以爲對象的每個實例都有唯一的值。當在對象定義的內部引用時,您會參考ix
,前綴爲self
,並且當對象外部帶有對象引用的前綴時。
gx = "hello"
class Foo:
def __init__(self, who):
self.ix = who
def greet(self):
lx = "%s, %s" % (gx, self.ix)
return lx
foo = Foo("world")
print foo.greet()
print foo.ix
有時候真的有用返回到第一原則:
當我們談論一個變量是本地或全局,我們指的是它的「範圍」(或上下文)。函數內的變量被認爲是本地的函數。以下是Swaroop的優秀導遊的插圖, 'A Byte of Python':
x = 50
def func(x):
print('x is', x)
x = 2
print('Changed local x to', x)
func(x)
print('x is still', x)
輸出:
x爲50
改變局部x 2
X仍然是50
下一步是的全球變量如何穿過內部和外部之間的函數的上下文的說明:
x = 50
def func():
global x
print('x is', x)
x = 2
print('Changed global x to', x)
func()
print('Value of x is', x)
輸出:
x是50
改變全局x到2
x的值是2
這就是它的全部。
當我們利用Python的面向對象編程方面時,'self'的概念就變得相關了。類實例和實例被認爲是'對象'和'self'。前綴允許我們的代碼區分是否引用本地/全局變量或對象的屬性。
再一次,這個概念被禪宗般簡單地解釋了Swaroop。
- 1. 非局部變量和全局變量有什麼區別?
- 2. 局部變量與全局變量
- 3. Python全局與局部變量?
- 4. JavaScript中的局部變量和全局變量之間的區別?
- 5. 靜態變量和全局變量(Java)有什麼區別?
- 6. 局部變量和全局變量的區別
- 7. 爲什麼局部變量會殺死我的全局變量?
- 8. 與全局變量
- 9. 與全局變量
- 10. 局部變量的全局變量
- 11. 爲什麼我的全局變量不是全局變量?
- 12. javascript中的局部與全局變量
- 13. 與局部變量
- 14. JS全局變量到局部變量
- 15. PowerShell全局變量局部變量
- 16. 全局與局部靜態變量的shell環境變量
- 17. 通過函數之間的變量與全局變量
- 18. MySql'wait_timeout'全局變量與變量
- 19. 全局變量與配置變量
- 20. 設置一個全局變量與局部變量
- 21. 將變量初始化爲全局變量並在Python中聲明變量爲None時有什麼區別
- 22. 在其他全局變量之間匹配PHP全局變量
- 23. Rails - 局部變量與實例變量
- 24. 爲什麼實例變量需要「self」才能訪問,但全局變量沒有前綴?
- 25. 全局變量和內部類有什麼區別?
- 26. 引用與Python中的局部變量名稱相同的全局變量
- 27. 從函數傳遞局部變量變爲全局變量
- 28. Python全局變量__
- 29. 什麼是模塊變量與全局變量?
- 30. R:局部/全局變量
首先。 Python變量不是「已定義」的。這可能是你的大部分問題。你是否被「全球」與「本地」混爲一談?這似乎不太可能。例如,你可以寫下你認爲你知道你有什麼具體的**問題嗎?如果你提供了什麼使你感到困惑的細節,這將有所幫助。代碼示例可以幫助您列出有關令人困惑的代碼的具體內容。 – 2011-12-26 20:19:08
我主要困惑於「自我」如何進入全球與本地領域的畫面...... – 2011-12-26 20:20:02
創建變量的術語是「創造」。賦值語句創建一個變量。 – 2011-12-26 20:21:05