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

Not not x 和 Bool(x) 用哪個比較好?

開發 前端
從結果來看,not not x 比 bool(x) 更快,主要原因在于 bool(x) 是一個函數調用,函數調用需要參數壓入棧頂,堆棧的頂部包含位置參數,最右邊的參數在頂部,參數下面是要調用的可調用對象。

[[434453]]

今天來做一個選擇,就是 not not x 和 bool(x) 用哪個比較好?

他們都可以把 x 變成一個布爾類型的值:

  1. >>> x = 123 
  2. >>> not not x 
  3. True 
  4. >>> bool(x) 
  5. True 
  6. >>> 

那么誰更快呢?我們寫段代碼,跑個 100 萬次,來比較下誰更快:

  1. import timeit 
  2.  
  3.  
  4. def bool_convert(x): 
  5.     return bool(x) 
  6.  
  7.  
  8. def notnot_convert(x): 
  9.     return not not x 
  10.  
  11.  
  12. def main(): 
  13.     trials = 10_000_000 
  14.     kwargs = { 
  15.         "setup""x=42"
  16.         "globals": globals(), 
  17.         "number": trials, 
  18.     } 
  19.  
  20.     notnot_time = timeit.timeit("notnot_convert(x)", **kwargs) 
  21.     bool_time = timeit.timeit("bool_convert(x)", **kwargs) 
  22.  
  23.     print(f"{bool_time = :.04f}"
  24.     print(f"{notnot_time = :.04f}"
  25.  
  26.  
  27. if __name__ == "__main__"
  28.     main() 

運行結果如下:

其實 bool(x) 慢的原因在于它是一個函數調用,而 not not x 就是一條指令,具有更快捷的轉換為布爾值的路徑,這一點可以從字節碼可以看出來:

bool(x) 多了 LOAD_GLOBAL 和 CALL_FUNCTION。

這里附一下相關字節碼的官方說明:

  1. LOAD_GLOBAL(namei) 
  2. Loads the global named co_names[namei] onto the stack. 
  3.  
  4. CALL_FUNCTION(argc) 
  5. Calls a callable object with positional arguments. argc indicates the number of positional arguments. The top of the stack contains positional arguments, with the right-most argument on top. Below the arguments is a callable object to call. CALL_FUNCTION pops all arguments and the callable object off the stack, calls the callable object with those arguments, and pushes the return value returned by the callable object. 
  6.  
  7. UNARY_NOT 
  8. Implements TOS = not TOS. 

最后

從結果來看,not not x 比 bool(x) 更快,主要原因在于 bool(x) 是一個函數調用,函數調用需要參數壓入棧頂,堆棧的頂部包含位置參數,最右邊的參數在頂部,參數下面是要調用的可調用對象。CALL_FUNCTION 從堆棧中彈出所有參數和可調用對象,使用這些參數調用可調用對象,并推送可調用對象返回的返回值,這一過程比一個 not 指令要慢得多。 

不過我仍然推薦你使用 bool(x),因為它的可讀性更高,而且,你也不太可能調用它 100萬次。

 

責任編輯:武曉燕 來源: Python七號
相關推薦

2021-11-05 07:13:46

Python

2021-11-30 23:01:51

編程語言數據Python

2009-09-15 09:24:42

思科認證考試思科認證

2021-08-05 08:32:45

TypeScript InterfaceType

2020-09-23 16:53:46

Python編輯器工具

2018-06-16 14:32:16

無線路由器單頻雙頻

2010-03-29 17:38:18

CentOS源代碼

2021-03-15 14:09:49

電腦軟件安全

2020-01-17 13:33:42

大數據分析師大數據工程師

2011-10-26 20:34:24

ssh 客戶端

2020-12-08 15:54:15

編程語言Python

2020-11-18 09:26:52

@property裝飾器代碼

2020-06-30 09:10:35

編程學習技術

2020-07-28 10:40:26

大數據專業技術

2015-01-08 22:06:18

2023-04-27 07:26:31

IP地址無符號

2022-06-06 15:06:42

MySQLJAVA

2018-12-17 13:03:39

AI數據科技

2014-06-05 15:16:49

Linux開源Flash
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 密色视频| 91在线视频观看 | 91看片在线 | 成人欧美一区二区三区视频xxx | 午夜色婷婷 | 在线观看中文字幕 | 日本不卡一区二区三区在线观看 | 欧美日韩午夜精品 | 精品久久电影 | 亚洲av毛片 | www.天天操.com | 999久久久| 男人天堂网址 | 亚洲精品一区二区三区蜜桃久 | 国产成人99久久亚洲综合精品 | 久在线| 亚洲人成人一区二区在线观看 | 亚洲国产成人在线观看 | 精品视频国产 | 美女激情av | 综合五月婷 | 91视频进入 | 欧美激情在线观看一区二区三区 | 国产精品99精品久久免费 | 性高湖久久久久久久久aaaaa | 欧美成人一区二区三区 | 国产精品一区二区在线播放 | 国产97碰免费视频 | 亚洲免费在线 | 一区二区三区久久久 | 欧美久久一区二区 | 日韩中文一区二区 | 综合久久久 | 久久精品亚洲欧美日韩久久 | 淫片一级国产 | 久久草在线视频 | 97日日碰人人模人人澡分享吧 | 国产女人叫床高潮大片免费 | 男人亚洲天堂 | 91av免费观看 | 久久久免费少妇高潮毛片 |