成人免费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技術棧公眾號

主站蜘蛛池模板: 免费影视在线观看 | 日本精品网站 | 久视频在线观看 | 国产精品亚洲片在线播放 | 国产成人在线视频 | 久久久久久成人 | 中文字幕在线中文 | 在线一区观看 | 欧美一区视频在线 | 毛片大全 | 久久久新视频 | 91免费小视频 | 国产乱码一二三区精品 | 成人久久18免费 | www.五月婷婷.com | 国产在线观看一区二区 | 亚洲在线中文字幕 | 国产精品自在线 | 欧美日日 | 婷婷色成人 | 俺去俺来也www色官网cms | 五月天天丁香婷婷在线中 | 国产精品视频久久 | 黄网站免费在线观看 | 成人精品免费视频 | 熟女毛片| 日韩精品中文字幕在线 | 性天堂网 | 欧美综合一区 | 成人免费视频一区二区 | 日本成人中文字幕 | 亚洲精品久久久久久一区二区 | 超碰男人天堂 | 免费a网站 | 久艹av| 亚洲一区二区三区四区五区午夜 | 久久一区二区三区四区 | 欧美理论 | 欧美成人精品一区二区男人看 | 精品久久久久久亚洲综合网 | 久久久久亚洲 |