>> some_dict[5.5]"Ruby">>> some_d..." />
<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pyhton中三個神仙般的返回操作

          共 1779字,需瀏覽 4分鐘

           ·

          2020-08-23 09:04







          來源:

          https://github.com/leisurelicht/wtfpython-cn

          第一個:神奇的字典鍵

          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" 覆蓋了.

          • 這個 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?中執(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

          說明:

          • 當調(diào)用?id?函數(shù)時, Python 創(chuàng)建了一個?WTF?類的對象并傳給?id?函數(shù). 然后?id?函數(shù)獲取其id值 (也就是內(nèi)存地址), 然后丟棄該對象. 該對象就被銷毀了.

          • 當我們連續(xù)兩次進行這個操作時, Python會將相同的內(nèi)存地址分配給第二個對象. 因為 (在CPython中)?id?函數(shù)使用對象的內(nèi)存地址作為對象的id值, 所以兩個對象的id值是相同的.

          • 綜上, 對象的id值僅僅在對象的生命周期內(nèi)唯一. 在對象被銷毀之后, 或被創(chuàng)建之前, 其他對象可以具有相同的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

          正如你所看到的, 對象銷毀的順序是造成所有不同之處的原因.


          推薦閱讀:《架構師離職后,成為自由開發(fā)者的第 100 天

          END



          若覺得文章對你有幫助,隨手轉發(fā)分享,也是我們繼續(xù)更新的動力。


          長按二維碼,掃掃關注哦

          ?「C語言中文網(wǎng)」官方公眾號,關注手機閱讀教程??



          點擊“閱讀原文”,領取 2020 年最新免費技術資料大全

          ↓↓↓?
          瀏覽 29
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲欧美秘 无码一区二区蜜桃 | 操逼逼逼逼网站 | 成人一级A片 | 亚洲中文字幕在线观看视频了 | 国产精品揄拍500视频 |