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

不可思議,Python 的鏈式操作竟然可以這樣

開發 后端
學習 Python 的過程中,有沒有讓你出乎意料的情景,在細品之后,又覺得情理之中呢?(有的話文末留言哈)我就遇到過,初見時不可思議,仔細學習之后,又覺得豁然開朗,Python 的鏈式操作就是這樣的場景。

[[434237]]

學習 Python 的過程中,有沒有讓你出乎意料的情景,在細品之后,又覺得情理之中呢?(有的話文末留言哈)我就遇到過,初見時不可思議,仔細學習之后,又覺得豁然開朗,Python 的鏈式操作就是這樣的場景。

不可思議

比如說,你看到 True is False 的結果是 False, False is False 的結果是 True ,不會覺得有什么問題:

  1. >>> True is False 
  2. False 
  3. >>> False is False 
  4. True 

然后,當你你看到 True is False is False 的結果是 False,可能就覺得不可思議。

  1. >>> True is False is False 
  2. False 
  3. >>> 

因為無論是從前計算,還是從后計算,結果都應該是 True 啊:

  1. >>> (True is Falseis False 
  2. True 
  3. >>> True is (False is False
  4. True 
  5. >>> 

豁然開朗

當認知和實際情況不一致的時候,恰恰是我們需要學修正自己的時候。這種操作屬于鏈式操作,Python 的官方文檔有解釋:https://docs.python.org/3/reference/expressions.html#comparisons

翻譯一下,大致意思就是 Python 中的比較運算與 C 語言不同,這些比較操作具有相同的優先級,該優先級低于任何算術,移位或按位運算。

這些比較操作包括 in, not in, is, is not, <, <=, >, >=, !=, == 操作符,會產生 True 或 False 的結果,這些比較操作符號可以任意的鏈式比較,比如:x < y <= z,x < y 與 y <= z 具有相同的優先級,不存在先計算 x < y ,得到結果后再與<=z 進行比較的情況,因此x < y <= z 與 x < y and y <= z是等價的。

x < y and y <= z 中,如果 x < y 的結果是 False,那么 y <= z 根本不會被計算。

也就是說a op1 b op2 c ... y opN z 等價于 a op1 b and b op2 c and ... y opN z,每一個表達式最多被執行一次。

注意,a op1 b op2 c 并不代表 a 和 c 有必然的關系,比如這樣寫x < y > z 也是合法的,雖然并不好看。

那么開始的問題就變得簡單了:

  1. True is False is False 

相當于

  1. (True is Falseand (False is False

結果自然就是 False。

相信,現在你已經明白了下面的現象:

  1. >>> 1 in [0,1] == True 
  2. False 
  3. >>> not True in [True,False
  4. False 

然后,我再分享一下鏈式操應用的好例子和壞例子。

好例子,一目了然:

  1. if 0 < x < 1: 
  2.     print("x in range (0,1)"
  3.  
  4. if 0 <= x < 1: 
  5.     print("x in range [0,1)"
  6.  
  7. if x <= y <= z: 
  8.     print("y in range [x,z]"
  9.  
  10. if x >= y >= 1: 
  11.     print("y in range [1,x]"
  12.  
  13. if x == y == z: 
  14.     print("x,y,z all equal"

壞例子,不知所云。我們應該避免這樣寫:

  1. if x < y > z: 
  2.     print("y > max(x,z)"
  3.  
  4. if x != y != z: 
  5.     print("kinda looks like x,y,z all distinct, but may have x==z"
  6.  
  7. if 0 > x < y != z > 1: 
  8.     print("WHY??"
  9.  
  10. if 0 < x > 1 >> y << 1 < z > 1: 
  11.     print("please remove this from the language"

用法沒問題,但可能讓人產生疑問的,類似文章開頭的例子,也盡量避免:

  1. if 0 < x < y == z < 1: 
  2.     print("x,y in (0,1) with x<y and z==y"
  3.  
  4. if x <= y <= z != 1: 
  5.     print("y in range(x,z) with z != 1"
  6.  
  7. if x == y == z != 1: 
  8.     print("x,y,z all equal something that isn't 1"
  9.  
  10. if x is y is z: 
  11.     print("x,y,z all identical"
  12.  
  13. if x is y is z in [1, 2, 3]: 
  14.     print("x,y,z all identical and in [1,2,3]"

 

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

2023-04-06 09:44:00

ChatGPT行業質量

2013-10-10 13:07:25

方物

2017-03-21 08:52:20

神經網絡聲譽

2024-04-07 00:00:00

億級數據ES

2011-02-23 08:50:22

C#.NETdynamic

2022-01-24 15:57:34

Python返回功能代碼

2010-07-15 16:21:03

不可思議的服務器

2020-07-02 15:40:11

Spring BootJar包Java

2011-07-18 13:35:14

HTML 5

2013-07-31 15:06:58

未來的WebWebGLWeb

2014-07-26 22:18:51

2014-01-14 10:33:42

開源硬件開源

2017-11-08 14:07:45

數據庫MySQL慢查分析

2012-02-13 11:01:27

N9Android 4.0

2016-07-06 11:56:52

思科漢堡光纖骨干網

2012-05-16 17:28:32

智能手機

2023-04-04 22:31:11

GPT-5人工智能

2021-03-03 07:12:47

Windows10操作系統微軟

2014-11-13 10:08:21

2020-09-16 10:24:37

物聯網環保應用IOT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人午夜高清 | 国产97人人超碰caoprom | 国产成人免费网站 | 国产精品永久免费视频 | 青青草这里只有精品 | 亚洲精品视频免费观看 | 毛片视频网址 | 欧美日日 | 日韩在线观看一区二区三区 | 男人的天堂avav | 一区二区三区亚洲 | 国产精品久久久久久久久久免费看 | 天天欧美 | www国产成人免费观看视频,深夜成人网 | 亚洲成人一二区 | 日本一区二区三区在线观看 | 欧美第一页 | 羞羞视频免费观 | 亚洲国产精品久久久久秋霞不卡 | 国产高清免费 | 成年人免费看 | 日韩在线视频一区 | 色视频一区二区 | 在线a视频 | 韩日在线| 日韩网站在线观看 | 免费黄色的网站 | 一区观看| 久久久www成人免费无遮挡大片 | 日韩精品一区二区三区视频播放 | 台湾佬久久 | 亚洲国产精品久久久 | 日韩欧美精品在线 | 国产精品不卡一区 | 亚洲人在线观看视频 | 人人草人人干 | 91视频大全| 久久久久久久国产 | 久久久精品网 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 毛片免费在线 |