第一個:神奇的字典鍵html
不少人學習python,不知道從何學起。python
不少人學習python,掌握了基本語法事後,不知道在哪裏尋找案例上手。app
不少已經作案例的人,殊不知道如何去學習更加高深的知識。函數
那麼針對這三類人,我給你們提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!學習
QQ羣:1097524789url
Output:spa
"Python" 消除了 "JavaScript" 的存在?code
說明:視頻
Python 字典經過檢查鍵值是否相等和比較哈希值來肯定兩個鍵是否相同.htm
具備相同值的不可變對象在Python中始終具備相同的哈希值.
注意: 具備不一樣值的對象也可能具備相同的哈希值(哈希衝突).
當執行 some_dict[5] = "Python"
語句時, 由於Python將 5
和 5.0
識別爲 some_dict
的同一個鍵, 因此已有值 "JavaScript" 就被 "Python" 覆蓋了.
這個 StackOverflow的 回答(https://stackoverflow.com/a/32211042/4354153) 漂亮的解釋了這背後的基本原理.
第二個:異常處理中的return
Output:
說明:
當在 "try...finally" 語句的 try
中執行 return
, break
或 continue
後, finally
子句依然會執行.
函數的返回值由最後執行的 return
語句決定. 因爲 finally
子句必定會執行, 因此 finally
子句中的 return
將始終是最後執行的語句.
第三個:相同對象的判斷
Output:
說明:
當調用 id
函數時, Python 建立了一個 WTF
類的對象並傳給 id
函數. 而後 id
函數獲取其id值 (也就是內存地址), 而後丟棄該對象. 該對象就被銷燬了.
當咱們連續兩次進行這個操做時, Python會將相同的內存地址分配給第二個對象. 由於 (在CPython中) id
函數使用對象的內存地址做爲對象的id值, 因此兩個對象的id值是相同的.
綜上, 對象的id值僅僅在對象的生命週期內惟一. 在對象被銷燬以後, 或被建立以前, 其餘對象能夠具備相同的id值.
那爲何 is
操做的結果爲 False
呢? 讓咱們看看這段代碼.
Output:
正如你所看到的, 對象銷燬的順序是形成全部不一樣之處的緣由.
第一個:神奇的字典鍵
some_dict = {}
some_dict[5.5] = "Ruby"
some_dict[5.0] = "JavaScript"
some_dict[5] = "Python"
Output:
>>> some_dict[5.5]
"Ruby"
>>> some_dict[5.0]
"Python"
>>> some_dict[5]
"Python"
"Python" 消除了 "JavaScript" 的存在?
Python 字典經過檢查鍵值是否相等和比較哈希值來肯定兩個鍵是否相同.
具備相同值的不可變對象在Python中始終具備相同的哈希值.
注意: 具備不一樣值的對象也可能具備相同的哈希值(哈希衝突).
>>> 5 == 5.0
True
>>> hash(5) == hash(5.0)
True
當執行 some_dict[5] = "Python"
語句時, 由於Python將 5
和 5.0
識別爲 some_dict
的同一個鍵, 因此已有值 "JavaScript" 就被 "Python" 覆蓋了.
這個 StackOverflow的 回答(https://stackoverflow.com/a/32211042/4354153) 漂亮的解釋了這背後的基本原理.
第二個:異常處理中的return
def some_func():
try:
return from_try
finally:
return from_finally
Output:
>>> some_func()
from_finally
說明:
當在 "try...finally" 語句的 try
中執行 return
, break
或 continue
後, finally
子句依然會執行.
函數的返回值由最後執行的 return
語句決定. 因爲 finally
子句必定會執行, 因此 finally
子句中的 return
將始終是最後執行的語句.
第三個:相同對象的判斷
class WTF:
pass
Output:
>>> WTF() == WTF() # 兩個不一樣的對象應該不相等
False
>>> WTF() is WTF() # 也不相同
False
>>> hash(WTF()) == hash(WTF()) # 哈希值也應該不一樣
True
>>> id(WTF()) == id(WTF())
True
當調用 id
函數時, Python 建立了一個 WTF
類的對象並傳給 id
函數. 而後 id
函數獲取其id值 (也就是內存地址), 而後丟棄該對象. 該對象就被銷燬了.
當咱們連續兩次進行這個操做時, Python會將相同的內存地址分配給第二個對象. 由於 (在CPython中) id
函數使用對象的內存地址做爲對象的id值, 因此兩個對象的id值是相同的.
綜上, 對象的id值僅僅在對象的生命週期內惟一. 在對象被銷燬以後, 或被建立以前, 其餘對象能夠具備相同的id值.
那爲何 is
操做的結果爲 False
呢? 讓咱們看看這段代碼.
class WTF(object):
def __init__(self): print("I")
def __del__(self): print("D")
Output:
>>> WTF() is WTF()
I
I
D
D
False
>>> id(WTF()) == id(WTF())
I
D
I
D
True
正如你所看到的, 對象銷燬的順序是形成全部不一樣之處的緣由.