我正在爲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. Python的__reduce __/copy_reg語義和狀態unpickler
- 2. 等待(空)和等待(&狀態)C語言和狀態
- 3. 分叉和UML狀態機加入的語義
- 4. Python中的動態語義錯誤
- 5. python asynchat狀態
- 6. Parsec和用戶定義的狀態
- 7. 狀態:12152和狀態:12029
- 8. SD卡狀態的術語
- 9. Ruby語法,語義問題def status =(狀態)
- 10. Hacklang是一種有狀態語言還是無狀態語言?
- 11. 刪除Python。狀態
- 12. 使用Python和Tweepy查詢Twitter狀態
- 13. 狀態混合多處理和在Python
- 14. Python腳本參數和保持狀態
- 15. Python隨機使用狀態和種子?
- 16. GetRecurringPaymentsProfileDetails狀態定義
- 17. 自定義控件和狀態
- 18. 自定義CursorAdapter和CheckBox狀態
- 19. Qlearning - 定義狀態和獎勵
- 20. MVC3自定義錯誤和HTTP狀態
- 21. OVER_QUERY_LIMIT狀態碼的含義
- 22. 意義問題狀態的
- 23. 處於活動狀態和非活動狀態的狀態圖
- 24. TypeError:'狀態'和'狀態'的實例之間不支持'<'PYTHON 3
- 25. 語法HTTP狀態頭
- 26. if語句負狀態
- 27. SQL狀態連接語句
- 28. C++的哪個狀態機執行框架實現UML語義?
- 29. 內部錯誤狀態下的語義UI輸入元素
- 30. 管理React(語義UI)中多個下拉菜單的狀態
你是什麼意思*它推斷基於上下文的類型*? – bereal
那麼如果有一個變量a ..並且語句是a = 2 ..那麼它推斷出一個類型是integer ..或者如果它是「a = 2 + 2.2」,那麼通過上下文它推斷出一個類型漂浮 –
以及它沒有多少推測將整數看作一個整數。它不是推斷任何東西,因爲它是如何在python中定義整數的,就像'int a = 10;'的強定義一樣,如果你希望它是非整數的東西,那麼你必須像在任何其他語言中一樣聲明它。只有浮點數,整數,字符串,字節,元組,列表,字典和虛數具有速記聲明 – joojaa