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