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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】有趣且鲜为人知的 Python 特性,火了!

發布時間:2025/3/12 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】有趣且鲜为人知的 Python 特性,火了! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小編最近逛Github發現了一個給力的Python項目,絕對能讓你傻眼!可以通過這個項目測試你對Python的熟悉程度!

這個項目叫做 “What the f*ck Python!?????",主要????講一些有趣且鮮為人知的 Python 特性。????

項目地址為:https://github.com/leisurelicht/wtfpython-cn

來體會一些難以理解和反人類直覺的Python特性吧!

>>>?a?=?256 >>>?b?=?256 >>>?a?is?b True>>>?a?=?257 >>>?b?=?257 >>>?a?is?b False>>>?a?=?257;?b?=?257 >>>?a?is?b True

是我眼花了么?我動手敲了下,確實是這樣...

這是為啥呢?

因為 256?是一個已經存在的對象, 而?257?不是。

大家可以想到256是2的8次方。

當Python開啟后,-5~256數字已經分配好對象了,主要考慮這些數字經常使用。

引用自?https://docs.python.org/3/c-api/long.html

可以再看看這個案例:

>>>?id(256) 10922528 >>>?a?=?256 >>>?b?=?256 >>>?id(a) 10922528 >>>?id(b) 10922528 >>>?id(257) 140084850247312 >>>?x?=?257 >>>?y?=?257 >>>?id(x) 140084850247440 >>>?id(y) 140084850247344

大家都知道,在Python中通過id( )可以確定兩個變量存儲的內容是否是同一個,通過以上的代碼結果說明創建了多個257對象。

你以為到這就結束了么?并沒有

再來繼續看這個:

>>>?a,?b?=?257,?257 >>>?id(a) 140640774013296 >>>?id(b) 140640774013296 >>>?a?=?257 >>>?b?=?257 >>>?id(a) 140640774013392 >>>?id(b) 140640774013488


這又觸及我的知識盲區了!這是為啥啊?

揭曉答案吧!當a和b在同一行被賦值為相同內容時,Python解釋器會創建一個變量,然后引用它(不新創建了!)。注意這是在交互式的環境中,屬于交互式環境的編譯器優化。

我們看下一個有趣的特性:

#?我們先初始化一個變量row row?=?[""]*3?#row?i['',?'',?''] #?并創建一個變量board board?=?[row]*3 >>>?board [['',?'',?''],?['',?'',?''],?['',?'',?'']] >>>?board[0] ['',?'',?''] >>>?board[0][0] '' >>>?board[0][0]?=?"X" >>>?board [['X',?'',?''],?['X',?'',?''],?['X',?'',?'']]

???這是為啥呢,我明明只給一個位置賦值了“X”啊!

大家應該想到了原因!

當我們初始化時:

然后我們使用乘法初始化board變量時,是這樣的:

也就是說,這三行都引用了row的內存空間。

所以改變其中一個位置的值,也就改變了3個位置的值!

為了避免引用相同位置內容,可以采用以下方法:

>>>?board?=?[['']*3?for?_?in?range(3)] >>>?board[0][0]?=?"X" >>>?board [['X',?'',?''],?['',?'',?''],?['',?'',?'']]

接著看下個案例吧:

神奇的三引號!

>>>?print('wtfpython''') wtfpython >>>?print("wtfpython""") wtfpython >>>?#?下面的語句會拋出?`SyntaxError`?異常 >>>?#?print('''wtfpython') >>>?#?print("""wtfpython")

補充個說明,Python的隱式字符串連接:

>>>?print("wtf"?"python") wtfpython >>>?print("wtf"?"")?#?or?"wtf""" wtf

思考一下再看答案!

答案:''' 和 """ 在 Python中也是字符串定界符, Python 解釋器在先遇到三個引號的的時候會嘗試再尋找三個終止引號作為定界符, 如果不存在則會導致 SyntaxError 異常。

我們再來看下一個例子:

#?一個簡單的例子,?統計下面可迭代對象中的布爾型值的個數和整型值的個數 mixed_list?=?[False,?1.0,?"some_string",?3,?True,?[],?False] integers_found_so_far?=?0 booleans_found_so_far?=?0for?item?in?mixed_list:if?isinstance(item,?int):integers_found_so_far?+=?1elif?isinstance(item,?bool):booleans_found_so_far?+=?1

返回的結果是:

>>>?integers_found_so_far 4 >>>?booleans_found_so_far 0

???我的bool值都到哪去了?

其實,布爾值是int的子類,看下面這個就懂了:

>>>?isinstance(True,?int) True >>>?isinstance(False,?int) True

如果還沒理解,可以繼續往下看:

another_dict?=?{} another_dict[True]?=?"JavaScript" another_dict[1]?=?"Ruby" another_dict[1.0]?=?"Python" >>>?another_dict[True] "Python"

True 的整數值是 1, 而 False 的整數值是?0。

>>>?True?==?1?==?1.0?and?False?==?0?==?0.0 True >>>?some_bool?=?True >>>?"wtf"*some_bool 'wtf' >>>?some_bool?=?False >>>?"wtf"*some_bool ''

還有很多Python神奇的特性,大家自己看這個項目吧~

如果覺得項目作者寫的不錯,給他點亮star吧!

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 本站qq群704220115,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【Python】有趣且鲜为人知的 Python 特性,火了!的全部內容,希望文章能夠幫你解決所遇到的問題。

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