1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        那些讓人直呼臥槽的Python代碼!

        共 2290字,需瀏覽 5分鐘

         ·

        2022-03-08 18:16

        文 |?閑歡

        來源:Python 技術(shù)「ID: pythonall」

        Python 是一個(gè)設(shè)計(jì)優(yōu)美的解釋型高級(jí)語(yǔ)言, 它提供了很多能讓程序員感到舒適的功能特性。但有的時(shí)候, Python 的一些輸出結(jié)果對(duì)于初學(xué)者來說似乎并不是那么一目了然。

        如果您是一位經(jīng)驗(yàn)比較豐富的 Python 程序員, 你可以嘗試挑戰(zhàn)看是否能一眼看出運(yùn)行的結(jié)果。

        只運(yùn)行一次?

        下面的代碼,會(huì)運(yùn)行幾次?

        for?i?in?range(4):
        ????print(i)
        ????i?=?10

        運(yùn)行之后,輸出:

        0
        1
        2
        3

        What? 難道不是輸出 0 ?

        原理解析:

        • 由于循環(huán)在 Python 中工作方式, 賦值語(yǔ)句 i = 10 并不會(huì)影響迭代循環(huán), 在每次迭代開始之前, 迭代器(這里指 range(4)) 生成的下一個(gè)元素就被解包并賦值給目標(biāo)列表的變量(這里指 i)了。

        搗蛋的 hash

        some_dict?=?{}
        some_dict[5.5]?=?"Ruby"
        some_dict[5.0]?=?"JavaScript"
        some_dict[5]?=?"Python"
        print(some_dict[5.5])
        print(some_dict[5.0])
        print(some_dict[5])

        運(yùn)行之后輸出:

        Ruby
        Python
        Python

        原理解析:

        • Python 字典通過檢查鍵值是否相等和比較哈希值來確定兩個(gè)鍵是否相同。
        • 當(dāng)執(zhí)行 some_dict[5] = "Python" 語(yǔ)句時(shí), 因?yàn)镻ython將 5 和 5.0 識(shí)別為 some_dict 的同一個(gè)鍵, 所以已有值 "JavaScript" 就被 "Python" 覆蓋了

        到處返回

        def?some_func():
        ????try:
        ????????return?'from_try'
        ????finally:
        ????????return?'from_finally'

        print(some_func())

        運(yùn)行之后輸出:

        from_finally

        難道不是 from_try ?

        原理解析:

        • 當(dāng)在 "try...finally" 語(yǔ)句的 try 中執(zhí)行 return, break 或 continue 后, finally 子句依然會(huì)執(zhí)行。
        • 函數(shù)的返回值由最后執(zhí)行的 return 語(yǔ)句決定, 由于 finally 子句一定會(huì)執(zhí)行, 所以 finally 子句中的 return 將始終是最后執(zhí)行的語(yǔ)句。

        非也非也

        print('something'?is?not?None)
        print('something'?is?(not?None))

        運(yùn)行結(jié)果:

        True
        False

        原理解析:

        • is not 是個(gè)單獨(dú)的二元運(yùn)算符, 與分別使用 is 和 not 不同。
        • 如果操作符兩側(cè)的變量指向同一個(gè)對(duì)象, 則 is not 的結(jié)果為 False, 否則結(jié)果為 True 。

        從有到無(wú)

        some_list?=?[1,?2,?3]
        some_dict?=?{
        ????"key_1":?1,
        ????"key_2":?2,
        ????"key_3":?3
        }
        some_list?=?some_list.append(4)
        some_dict?=?some_dict.update({"key_4":?4})
        print(some_dict)
        print(some_list)

        運(yùn)行結(jié)果:

        None
        None

        原理解析:

        • 大多數(shù)修改序列/映射對(duì)象的方法, 比如 list.append, dict.update, list.sort 等等,都是原地修改對(duì)象并返回 None。

        同人不同命

        先來看一個(gè)程序片段:

        a?=?[1,?2,?3,?4]
        b?=?a
        a?=?a?+?[5,?6,?7,?8]
        print(a)
        print(b)

        運(yùn)行之后結(jié)果:

        [1,?2,?3,?4,?5,?6,?7,?8]
        [1,?2,?3,?4]

        再來看另一個(gè)程序片段:

        a?=?[1,?2,?3,?4]
        b?=?a
        a?+=?[5,?6,?7,?8]
        print(a)
        print(b)

        運(yùn)行之后結(jié)果:

        [1,?2,?3,?4,?5,?6,?7,?8]
        [1,?2,?3,?4,?5,?6,?7,?8]

        按照常規(guī)理解來說,這兩個(gè)程序片段返回的結(jié)果應(yīng)該是一樣的?

        原理解析:

        • a += b 并不總是與 a = a + b 表現(xiàn)相同, 類實(shí)現(xiàn)運(yùn)算符 = 運(yùn)算符的方式也許是不同的, 列表就是這樣做的。

        • 表達(dá)式 a = a + [5,6,7,8] 會(huì)生成一個(gè)新列表, 并讓 a 引用這個(gè)新列表, 同時(shí)保持 b 不變。

        • 表達(dá)式 a += [5,6,7,8] 實(shí)際上是使用的是 "extend" 函數(shù), 所以 ab 仍然指向已被修改的同一列表。

        總結(jié)

        看了這些代碼的運(yùn)行結(jié)果之后,有沒有直呼 WC ?有的話點(diǎn)個(gè)贊吧!

        是 Python 老手也很有可能被這些代碼給迷住,很難全對(duì)。這些代碼就像是那些行測(cè)里面的邏輯題,很容易被表面迷惑!但是運(yùn)行之后,看看其中的原理,對(duì)我們學(xué)習(xí) Python 也是有很大幫助的!

        往期推薦

        1、如何利用Python找到下一個(gè)“游戲驛站”?
        2、被稱為國(guó)內(nèi)版“谷歌”的F搜回來了,大變味!迷之操作實(shí)在太多...
        3、驚了 Win11還有變種版 更漂亮!
        4、帶帶弟弟ocr,對(duì)各種類型驗(yàn)證碼說不!
        5、知名安卓應(yīng)用,終于也淪為了廣告啟動(dòng)器

        點(diǎn)擊關(guān)注公眾號(hào),閱讀更多精彩內(nèi)容
        瀏覽 56
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            999久久久又粗又大国产精品 | 蜜桃91精品秘 入口内裤 | 性生大片免费观看性 | 男女交性全过程无遮视频 | 国产aⅴ片| 欧美操逼免费视频 | 日韩欧美操逼 | 国产夫妻自拍小视频 | 熟妇少妇任你躁在线无码 | 午夜福利无码视频 |