Python中三個不可思議的返回功能分享
第一個:神奇的字典鍵
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
當執(zhí)行 some_dict[5] = "Python"語句時, 因為Python將5和5.0識別為some_dict的同一個鍵, 所以已有值 "JavaScript" 就被 "Python" 覆蓋了
第二個:異常處理中的return
def some_func: try: return 'from_try' finally: return 'from_finally'
Output:
>>> some_func 'from_finally'
?? 說明:
- 當在 "try…finally" 語句的 try中執(zhí)行return,break或continue后,finally子句依然會執(zhí)行.
- 函數(shù)的返回值由最后執(zhí)行的 return語句決定. 由于finally子句一定會執(zhí)行, 所以finally子句中的return將始終是最后執(zhí)行的語句.
第三個:相同對象的判斷
class WTF: pass
Output:
>>> WTF == WTF # 兩個不同的對象應該不相等 False >>> WTF is WTF # 也不相同 False >>> hash(WTF) == hash(WTF) # 哈希值也應該不同 True >>> id(WTF) == id(WTF) True
?? 說明:
當調用 id函數(shù)時, Python 創(chuàng)建了一個WTF類的對象并傳給id函數(shù). 然后id函數(shù)獲取其id值 (也就是內存地址), 然后丟棄該對象. 該對象就被銷毀了.
當我們連續(xù)兩次進行這個操作時, Python會將相同的內存地址分配給第二個對象. 因為 (在CPython中) id函數(shù)使用對象的內存地址作為對象的id值, 所以兩個對象的id值是相同的.
綜上, 對象的id值僅僅在對象的生命周期內唯一. 在對象被銷毀之后, 或被創(chuàng)建之前, 其他對象可以具有相同的id值.
那為什么 is操作的結果為False呢? 讓我們看看這段代碼.
class WTF(object):
def __init__(self): print("I")
def __del__(self): print("D")
Output:
>>> WTF is WTF IIDDFalse>>> id(WTF) == id(WTF) IDIDTrue
正如你所看到的, 對象銷毀的順序是造成所有不同之處的原因。
總結
到此這篇關于Python中三個不可思議的返回功能分享的文章就介紹到這了,更多相關Python返回功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
零基礎寫python爬蟲之使用urllib2組件抓取網(wǎng)頁內容
文章詳細介紹了在python2.5環(huán)境下,如何使用urllib2這個python自帶的組件進行抓取指定網(wǎng)頁內容的,整個過程記錄的非常的詳細,也很簡單,有需要的朋友可以參考下,寫出自己的python爬蟲2014-11-11
Python 格式化輸出_String Formatting_控制小數(shù)點位數(shù)的實例詳解
在本篇文章里小編給大家整理了關于Python 格式化輸出_String Formatting_控制小數(shù)點位數(shù)的實例內容,需要的朋友們參考下。2020-02-02

