日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总有些代码会让你大呼“我勒个去,怎么会这样子“

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总有些代码会让你大呼“我勒个去,怎么会这样子“ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python是一門清晰易學的語言,可是這不代表我們Python沒有黑暗料理,下面我就挑選了幾個能讓你大呼"我勒個去,怎么會這樣"的程序,這些例子不光有趣,也能夠加深我們對于Python細節的理解,看看你自己能不能解釋吧。

本文取材于下面這個GitHub repository。

【github.com/satwikkansal/wtfpython】自己在前面加HTTP

以下代碼如果不信請手動嘗試,測試環境:Python 3.6

20跟21有什么區別

第一次看到這個例子的時候我的心里面充滿了wtf,20跟21有什么區別為什么結果不一樣?原因是,python在進行內部優化的時候會做常量替換的操作,也就是把 'a' * 20這種語句替換成'aaaaaaaaaaaaaaaaaaaa',這樣運行的時候節省時間,而剛好,小于等于20的時候會做這個優化,而大于20就不做這個優化了。。。

讓一個函數Return兩次

一般的Python教程會告訴你,當函數執行到第一個return的時候會退出,剩下的語句不再執行。然而如果是這樣的話上面的代碼中我們的somefunc()應該返回的是'from_try',但結果卻不是。這個現象的原因是finally后面的語句永遠會執行,而函數的返回值由最后一個return語句決定,所以函數的返回值是finally語句中的返回值。

循環幾次?

你猜下面的代碼會循環幾次

有些同學可能會猜只會循環一次,然后正確的輸出是

循環了4次,所以i=10這個語句完全沒用了嗎?是的,這跟Python的for循環的機制有關,每次在循環體之前,下一個需要的值先會產生好然后賦值給循環變量,這里的i。也就是說,雖然循環體中有一個i = 10,但下次循環前for又會做一個i=2或者i=3的操作,把i=10覆蓋了。如果大家對Python感興趣的話,可以加一下我的威信哦:abb436574,免費領取一套學習資料和視頻課程喲~

一石三鳥

現在我們賦個值給第一個元素,再看看結果

What?為什么有三個元素都變成了X,我們明明值賦了一個值啊?這是因為[row] * 3這個操作實際上沒有復制row,而只是創建了三個object reference,也就是board[0] board[1] board[2]這三個元素其實指向了同一個列表row,那么改變board[0][0]其實就是改變row[0],也同時改變了board[1][0] board[2][0]。

又是數字,256和257有什么區別?

論捐嗼,這又是怎么回事?這又引出了Python另一個優化機制,在解釋器開始的時候,會初始化-5到256這些數字,因為這些數字是常用的。所以a=256實際上是把a指向了已經創建好的256,b也同理。而257并沒有預先創建好,每一行的代碼在解釋器里面又是單獨優化的,所以寫b=257的時候解釋器不知道已經有了一個257,又新建了一個,因此他們倆指向不同的object。但當在一行里面同時給a b賦值為257的時候,解釋器優化知道這點,就只創建了一個257,所以a is b又是True了。補充說明一下,這個現象只存在于repl交互執行當中,如果你把這些語句寫在一個文件里面運行,那么編譯器會一起優化,所有的結果都是True了。

總結

以上是生活随笔為你收集整理的总有些代码会让你大呼“我勒个去,怎么会这样子“的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。