【Python】有趣且鲜为人知的 Python 特性,火了!
小編最近逛Github發現了一個給力的Python項目,絕對能讓你傻眼!可以通過這個項目測試你對Python的熟悉程度!
這個項目叫做 “What the f*ck Python!?????",主要????講一些有趣且鮮為人知的 Python 特性。????
項目地址為:https://github.com/leisurelicht/wtfpython-cn
來體會一些難以理解和反人類直覺的Python特性吧!
是我眼花了么?我動手敲了下,確實是這樣...
這是為啥呢?
因為 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解釋器會創建一個變量,然后引用它(不新創建了!)。注意這是在交互式的環境中,屬于交互式環境的編譯器優化。
我們看下一個有趣的特性:
???這是為啥呢,我明明只給一個位置賦值了“X”啊!
大家應該想到了原因!
當我們初始化時:
然后我們使用乘法初始化board變量時,是這樣的:
也就是說,這三行都引用了row的內存空間。
所以改變其中一個位置的值,也就改變了3個位置的值!
為了避免引用相同位置內容,可以采用以下方法:
接著看下個案例吧:
神奇的三引號!
>>>?print('wtfpython''') wtfpython >>>?print("wtfpython""") wtfpython >>>?#?下面的語句會拋出?`SyntaxError`?異常 >>>?#?print('''wtfpython') >>>?#?print("""wtfpython")補充個說明,Python的隱式字符串連接:
思考一下再看答案!
答案:''' 和 """ 在 Python中也是字符串定界符, Python 解釋器在先遇到三個引號的的時候會嘗試再尋找三個終止引號作為定界符, 如果不存在則會導致 SyntaxError 異常。
我們再來看下一個例子:
返回的結果是:
???我的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吧!
總結
以上是生活随笔為你收集整理的【Python】有趣且鲜为人知的 Python 特性,火了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OneNote怎样显示或者隐藏网格线
- 下一篇: 【GNN】AAAI2021 | 图神经网