<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>

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

          共 2290字,需瀏覽 5分鐘

           ·

          2022-03-08 18:16

          文 |?閑歡

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

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

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

          只運行一次?

          下面的代碼,會運行幾次?

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

          運行之后,輸出:

          0
          1
          2
          3

          What? 難道不是輸出 0

          原理解析:

          • 由于循環(huán)在 Python 中工作方式, 賦值語句 i = 10 并不會影響迭代循環(huán), 在每次迭代開始之前, 迭代器(這里指 range(4)) 生成的下一個元素就被解包并賦值給目標(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])

          運行之后輸出:

          Ruby
          Python
          Python

          原理解析:

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

          到處返回

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

          print(some_func())

          運行之后輸出:

          from_finally

          難道不是 from_try

          原理解析:

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

          非也非也

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

          運行結(jié)果:

          True
          False

          原理解析:

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

          從有到無

          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)

          運行結(jié)果:

          None
          None

          原理解析:

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

          同人不同命

          先來看一個程序片段:

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

          運行之后結(jié)果:

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

          再來看另一個程序片段:

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

          運行之后結(jié)果:

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

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

          原理解析:

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

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

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

          總結(jié)

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

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

          往期推薦

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

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

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  天天操夜夜拍免费视频 | 无码国产精品一区二区三 | 视频亚洲无码 | 亚洲精品午夜精品 | 思思操 |