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
當(dāng)執(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'
?? 說明:
- 當(dāng)在 "try…finally" 語句的 try中執(zhí)行return,break或continue后,finally子句依然會執(zhí)行.
- 函數(shù)的返回值由最后執(zhí)行的 return語句決定. 由于finally子句一定會執(zhí)行, 所以finally子句中的return將始終是最后執(zhí)行的語句.
第三個:相同對象的判斷
class WTF: pass
Output:
>>> WTF == WTF # 兩個不同的對象應(yīng)該不相等 False >>> WTF is WTF # 也不相同 False >>> hash(WTF) == hash(WTF) # 哈希值也應(yīng)該不同 True >>> id(WTF) == id(WTF) True
?? 說明:
當(dāng)調(diào)用 id函數(shù)時, Python 創(chuàng)建了一個WTF類的對象并傳給id函數(shù). 然后id函數(shù)獲取其id值 (也就是內(nèi)存地址), 然后丟棄該對象. 該對象就被銷毀了.
當(dāng)我們連續(xù)兩次進行這個操作時, Python會將相同的內(nèi)存地址分配給第二個對象. 因為 (在CPython中) id函數(shù)使用對象的內(nèi)存地址作為對象的id值, 所以兩個對象的id值是相同的.
綜上, 對象的id值僅僅在對象的生命周期內(nèi)唯一. 在對象被銷毀之后, 或被創(chuàng)建之前, 其他對象可以具有相同的id值.
那為什么 is操作的結(jié)果為False呢? 讓我們看看這段代碼.
class WTF(object): def __init__(self): print("I") def __del__(self): print("D")
Output:
>>> WTF is WTF IIDDFalse>>> id(WTF) == id(WTF) IDIDTrue
正如你所看到的, 對象銷毀的順序是造成所有不同之處的原因。
總結(jié)
到此這篇關(guān)于Python中三個不可思議的返回功能分享的文章就介紹到這了,更多相關(guān)Python返回功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python select及selectors模塊概念用法詳解
這篇文章主要介紹了Python select及selectors模塊概念用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06Python爬蟲入門案例之爬取去哪兒旅游景點攻略以及可視化分析
讀萬卷書不如行萬里路,學(xué)的扎不扎實要通過實戰(zhàn)才能看出來,本篇文章手把手帶你爬取去哪兒平臺的旅游景點攻略并進行可視化分析,大家可以在過程中查缺補漏,看看自己掌握程度怎么樣2021-10-10Python?OpenCV超詳細講解調(diào)整大小與圖像操作的實現(xiàn)
OpenCV用C++語言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實時視覺應(yīng)用,并在可用時利用MMX和SSE指令,本篇文章帶你通過OpenCV實現(xiàn)重調(diào)大小與圖像裁剪2022-04-04關(guān)于pycharm?python3.7成功安裝dlib庫的問題
這篇文章主要介紹了pycharm?python3.7成功安裝dlib庫的解決方法,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12Python生命游戲?qū)崿F(xiàn)原理及過程解析(附源代碼)
這篇文章主要介紹了Python生命游戲?qū)崿F(xiàn)原理及過程解析(附源代碼),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08詳解如何使用Python和正則表達式處理XML表單數(shù)據(jù)
在日常的Web開發(fā)中,處理表單數(shù)據(jù)是一個常見的任務(wù),而XML是一種常用的數(shù)據(jù)格式,用于在不同的系統(tǒng)之間傳遞和存儲數(shù)據(jù),本文通過闡述一個技術(shù)問題并給出解答的方式,介紹如何使用Python和正則表達式處理XML表單數(shù)據(jù),需要的朋友可以參考下2023-09-09