成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

驚奇時刻!盤點哪些讓你大呼“真牛”的 Python 代碼!

開發(fā) 后端
Python 作為一個設(shè)計優(yōu)美的高級語言,提供了很多簡單易用的特性,但簡單并不意味著容易理解,有時候一些輸出結(jié)果對于剛?cè)腴T的小伙伴并不是很明了,反而似乎有點反人類。

[[432243]]

Python 作為一個設(shè)計優(yōu)美的高級語言,提供了很多簡單易用的特性,但簡單并不意味著容易理解,有時候一些輸出結(jié)果對于剛?cè)腴T的小伙伴并不是很明了,反而似乎有點反人類。

今天派森醬就整理了一些非常有趣的例子,事實上這些例子不僅有趣,甚至還可以加深你對 Python 的理解,學(xué)到更多有趣的特性。

0x00

  1. >>> 'a' * 20 is 'aaaaaaaaaaaaaaaaaaaa' 
  2. True 
  3. >>> 'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa' 
  4. False # 2.7 版本返回 False 
  5. # 3.7 版本返回結(jié)果為 True 

很神奇的一個結(jié)果,第一次看到時我也驚呆了,事實上這是 Python 的一種優(yōu)化機制,叫常量折疊。這意味著在編譯時表達(dá)式 'a'*20 會被替換為 aaaaaaaaaaaaaaaaaaaa 以減少運行時時常,而只有長度小于 20 的字符串才會發(fā)生常量折疊。

0x01

  1. In [3]: a = 'python' 
  2.  
  3. In [4]: b = 'python' 
  4.  
  5. In [5]: a is b 
  6. Out[5]: True 
  7.  
  8. In [6]: x = 'python!' 
  9.  
  10. In [7]: y = 'python!' 
  11.  
  12. In [8]: x is y 
  13. Out[8]: False 

這是因為在編譯優(yōu)化時 Python 會嘗試使用一些已經(jīng)存在的不可辨對象,這種現(xiàn)象稱之為字符串駐留,而只包含字母數(shù)字和下劃線的字符串在編譯時是會駐留的,包含 ! 的字符串是不會駐留的。

0x02

  1. In [11]: some_dict = {} 
  2.  
  3. In [12]: some_dict[5.5] = 'Java' 
  4.  
  5. In [13]: some_dict[5.0] = 'Ruby' 
  6.  
  7. In [14]: some_dict[5] = 'Python' 
  8.  
  9. In [15]: some_dict[5.5] + '_' + some_dict[5.0] + '_' + some_dict[5] 
  10. Out[15]: 'Java_Python_Python' 
  11.  
  12. In [16]: 5 == 5.0 
  13. Out[16]: True 
  14.  
  15. In [17]: hash(5) == hash(5.0) 
  16. Out[17]: True 

Python 字典通過比較不可變對象是否相等和哈希值是否相等來確定是否為不同的鍵,但不同值的對象也可能具有相同的哈希值。因此字典以為 5.0 和 5 是同一個鍵,所以 Python 會覆蓋掉 Ruby。

0x03

  1. In [21]: def some_func(): 
  2.     ...:     try: 
  3.     ...:         return 'from_try' 
  4.     ...:     finally: 
  5.     ...:         return 'from_finally' 
  6.     ...: 
  7.  
  8. In [22]: some_func() 
  9. Out[22]: 'from_finally' 

函數(shù)的返回值由最后 return 的語句決定,而 finally 一定是最后之行的,所以會覆蓋掉 try 中的 return 結(jié)果。

0x04

  1. In [23]: for i in range(3): 
  2.     ...:     print(i) 
  3.     ...:     i = 10 
  4.     ...: 

在每次循環(huán)開始之前, 迭代器生成的下一個元素會重新賦值給 i,因此賦值語句 i = 10 并不會影響循環(huán)。

0x05

  1. In [24]: row = [''] * 3 
  2.  
  3. In [25]: table = [row] * 3 
  4.  
  5. In [26]: table 
  6. Out[26]: [[''''''], [''''''], ['''''']] 
  7.  
  8. In [27]: table[0][0] = 'python' 
  9.  
  10. In [28]: table 
  11. Out[28]: [['python'''''], ['python'''''], ['python''''']] 

這是因為通過乘法初始化 table 時,每個 item 也就是 table[0]、table[1]、table[2] 在內(nèi)存中引用的都是同一個列表。

0x06

  1. In [29]: a = 256 
  2.  
  3. In [30]: b = 256 
  4.  
  5. In [31]: a is b 
  6. Out[31]: True 
  7.  
  8. In [32]: a = 257 
  9.  
  10. In [33]: b = 257 
  11.  
  12. In [34]: a is b 
  13. Out[34]: False 

產(chǎn)生這種現(xiàn)象的根本原因就是 256 是一個已經(jīng)存在的對象而 257 不是,事實上當(dāng) Python 啟動時數(shù)值為 -5 到 256 這些常用的的對象就已經(jīng)被分配好了。

0x07

  1. In [37]: 'something' is not None 
  2. Out[37]: True 
  3.  
  4. In [38]: 'something' is (not None) 
  5. Out[38]: False 

這是因為 is not 是一個單獨的二元運算符,如果運算符兩側(cè)的變量指向同一個對象, 則 is not 的結(jié)果為 False, 否則為 True。

0x08

  1. In [47]: a = [1, 2, 3, 4] 
  2.  
  3. In [48]: b = a 
  4.  
  5. In [49]: a = a + [5, 6, 7, 8] 
  6.  
  7. In [50]: a 
  8. Out[50]: [1, 2, 3, 4, 5, 6, 7, 8] 
  9.  
  10. In [51]: b 
  11. Out[51]: [1, 2, 3, 4] 
  1. In [52]: a = [1, 2, 3, 4] 
  2.  
  3. In [53]: b = a 
  4.  
  5. In [54]: a += [5, 6, 7, 8] 
  6.  
  7. In [55]: a 
  8. Out[55]: [1, 2, 3, 4, 5, 6, 7, 8] 
  9.  
  10. In [56]: b 
  11. Out[56]: [1, 2, 3, 4, 5, 6, 7, 8] 

在第一個例子中 a = a + ... 會生成一個新的列表然后 a 指向這個列表,但 b 是保持不變的。

而第二個例子中的 a += ... 實際上是使用的是 extend 函數(shù),所以 a 和 b 指向的都是同一個列表。

0x09

  1. t = ('one''two'
  2. for i in t: 
  3.     print(i) 
  4.  
  5. print('*'*5) 
  6. t = ('one'
  7. for i in t: 
  8.     print(i) 
  9.  
  10. print('*'*5) 
  11. t = () 
  12. print(t) 
  13.  
  14. ## 輸出 
  15. one 
  16. two 
  17. tuple() 

在 Python 的世界 () 是一個特殊的標(biāo)記,表示空元組,這個非常容易理解。

而 t = ('one') 或者 t = 'one' 都是會被解釋成為字符串的。正確的寫法應(yīng)該是 t = ('one',)。

總結(jié)

 

今天派森醬帶領(lǐng)大家整理了一些 Python 中比較好玩有趣的代碼,覺得眼前一亮的同時還可以順帶更深刻的理解 Python 的設(shè)計思想,一舉兩得。

 

責(zé)任編輯:武曉燕 來源: Python技術(shù)
相關(guān)推薦

2025-03-11 08:30:00

Pythonretrying代碼

2022-02-19 08:11:01

Windows 11系統(tǒng)看點

2009-12-31 10:06:47

ADO .NET組件

2020-04-03 14:55:39

Python 代碼編程

2018-03-30 10:02:08

代碼規(guī)范維護(hù)工程師

2023-05-24 10:24:56

代碼Python

2021-03-28 16:55:11

Python工具鏈代碼

2024-02-07 01:47:47

atexit模塊程序

2024-01-08 17:09:07

Python解釋器CPython

2024-04-26 11:54:10

Pygments代碼Pytho

2023-12-06 13:43:00

python代碼

2024-10-08 10:24:41

Python編程語言

2022-01-06 22:31:21

Python技巧代碼

2022-02-23 14:37:48

代碼Pythonbug

2019-10-28 09:26:35

PylintPython編程語言

2021-01-01 14:36:03

Python開發(fā)語言

2011-04-13 10:51:58

MATLAB

2024-01-29 00:33:15

數(shù)據(jù)分析業(yè)務(wù)

2024-09-09 00:00:06

Windows工具箱網(wǎng)站

2013-02-01 17:36:35

App開發(fā)者用戶體驗
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜www | 精品国产一区二区三区成人影院 | 中日字幕大片在线播放 | 91精品在线播放 | 亚洲一二三区精品 | 亚洲欧美国产精品一区二区 | 91视频91 | 久久久国产一区 | 亚洲成人黄色 | 一级大黄色片 | 美国av片在线观看 | 午夜视频在线免费观看 | 亚洲天堂久久新 | 亚洲视频一区在线播放 | 一级毛片免费 | 久色网| 看黄在线 | 国产一区在线免费 | 久久久国产一区二区三区 | 国产xxxx岁13xxxxhd| 99久久精品国产一区二区三区 | 狠狠干网站 | 国产亚洲成av人片在线观看桃 | 亚洲黄色网址视频 | 久久久久国产精品 | 日韩国产精品一区二区三区 | a级网站 | 欧洲妇女成人淫片aaa视频 | 一区二区三区四区在线 | 久久久激情 | 国产一级黄色网 | 国产视频线观看永久免费 | 国产成人精品久久 | 久草成人网 | 亚洲三级在线 | 91私密视频 | 亚洲三级在线观看 | 草久在线视频 | 毛片免费在线观看 | 亚洲三区在线观看 | 欧美在线日韩 |