我正在爲Python編寫一些正式的語義。希望有些Python大師能幫助我。隨着程序執行向下移動到語句列表中,它遇到的每個賦值語句(或表達式)都會根據上下文來推斷類型。但是它會在某處存儲此類型(所以下次遇到它時可以檢查存儲和檢查類型),還是執行操作,然後丟棄類型,然後在下一次遇到變量時再次推斷類型? 這是Python 3 + btw (希望我已經明確)Python的語義和狀態
回答
Python使用動態類型。該類型是價值的一部分。無論價值何去何從,它的類型都會隨之而來。 (您可以使用type()
函數獲得與該類型相對應的獨立值。)只有當整個值被丟棄時纔會丟棄值的類型。變量只是對值的引用:每個變量恰好指向一個值,通常它可以是任何可能的值,對類型沒有限制。
例如,在
a = 2
Python不使a
一個int
變量; 2
是什麼類型int
。 a
只是對2
的引用,它恰好是一個整數。當你再寫入
b = a + 3
Python中通過簡單地獲得通過a
所指的價值,然後獲得的該類型得到的a
類型。評估表達式並將結果存儲在b
中。
從靜態類型語言的角度來看,就好像Python中的每個變量都具有相同類型值,因此每個變量都包含一個值。
有關靜態和動態類型的更多信息,請參閱this other question。
因此,在Java中存在知道對象類型的存儲區或狀態。所以你不能說「int i = 1 .... i = true」,因爲我的類型是int ...在Python中,你可以這樣做,因爲它會重新聲明變量。所以沒有這樣的狀態,從你的答案我得到的想法「a = 2」.. 2是存儲在內存地址a指向。然後當我對a執行操作時,它查找地址,看到a的類型是整數,然後評估操作? –
對,變量在Python中沒有像Java那樣的類型。在設置之前也不需要聲明它們。這組變量的作用非常像Java中的Map
這個混淆是我在Python中更喜歡「變量」這個術語的原因。 「變量」這個詞使它看起來像是某種東西,而不是對某物的引用。 –
- 1. Ruby語法,語義問題def status =(狀態)
- 2. 使用Python和Tweepy查詢Twitter狀態
- 3. Python腳本參數和保持狀態
- 4. 自定義控件和狀態
- 5. MVC3自定義錯誤和HTTP狀態
- 6. 處於活動狀態和非活動狀態的狀態圖
- 7. TypeError:'狀態'和'狀態'的實例之間不支持'<'PYTHON 3
- 8. 如何在語義反饋組件中訪問我的狀態?
- 9. 管理React(語義UI)中多個下拉菜單的狀態
- 10. C++的哪個狀態機執行框架實現UML語義?
- 11. Azure IoT C SDK中連接狀態的語義
- 12. 內部錯誤狀態下的語義UI輸入元素
- 13. 語法HTTP狀態頭
- 14. SQL狀態連接語句
- 15. PyDeadObjectError和狀態
- 16. web的含義是無狀態的,http是無狀態協議?
- 17. 有狀態和無狀態流處理
- 18. 訂單狀態和狀態日誌
- 19. 自定義狀態欄被SAP的默認狀態欄隱藏
- 20. EJB3:爲什麼事務語義和狀態性會考慮實現細節?
- 21. Android Python獲取GPS狀態
- 22. Python檢查Win狀態
- 23. Python urllib2 URLError HTTP狀態碼。
- 24. Python遞歸變量狀態
- 25. python subprocess.Popen塊在futex_狀態
- 26. 自定義狀態欄
- 27. 自定義android狀態欄
- 28. 狀態未定義(reactJS)
- 29. 語言爲Agular和React的SEO的狀態?
- 30. 術語'懶惰狀態定義'是指參考$ stateChangeNotFound
你是什麼意思*它推斷基於上下文的類型*? – bereal
那麼如果有一個變量a ..並且語句是a = 2 ..那麼它推斷出一個類型是integer ..或者如果它是「a = 2 + 2.2」,那麼通過上下文它推斷出一個類型漂浮 –
以及它沒有多少推測將整數看作一個整數。它不是推斷任何東西,因爲它是如何在python中定義整數的,就像'int a = 10;'的強定義一樣,如果你希望它是非整數的東西,那麼你必須像在任何其他語言中一樣聲明它。只有浮點數,整數,字符串,字節,元組,列表,字典和虛數具有速記聲明 – joojaa