3.1.1 條件表達式


  在選擇結果和訓話結構中,都要根據條件表達式的值來確定下一步的執行流程。條件表達式的值只要不是False、0(或0.0、0j等)、空值None、空列表、空元組、空集合、空字符串、空range對象或其他空迭代對象,Python解釋器均認為與True等價。從這個意義上來講,所有的Python合法表達式都可以作為條件表達式,包括含有函數調用的表達式。例如:

 1 >>> if 3:             #使用整數作為條件表達式
 2     print(5)  3 
 4     
 5 5
 6 >>> 
 7 >>> a = [1,2,3]  8 >>> 
 9 >>> if a:             #使用列表作為條件表達式
10     print(a) 11 
12     
13 [1, 2, 3] 14 >>> 
15 >>> a = [] 16 >>> 
17 >>> if a: 18     print(a) 19 else: 20     print('empty') 21 
22     
23 empty 24 >>> 
25 >>> 
26 >>> i = s = 0 27 >>> while i <= 10:        #使用關系表達式作為條件表達式
28     s += i 29     i += 1
30 
31     
32 >>> print(s) 33 55
34 >>> 
35 >>> i = s = 0 36 >>> while True:           #使用常量True作為條件表達式
37     s += i 38     i += 1
39     if i > 10 :           #符合特定條件是使用break語句退出循環
40         break
41 
42     
43 >>> 
44 >>> s 45 55
46 >>> 
47 
48 >>> s = 0 49 >>> for i in range(0,11,1):     #遍歷序列元素
50     s += i 51 
52     
53 >>> print(s) 54 55
55 >>> 

 

  關於表達式和運算符的詳細內容在1.3.3節已有介紹,這里不再贅述,只是重點介紹一下比較特殊的幾個運算符。首先是關系運算符,與很多語言不通的是,在Python中的關旭運算符可以連續使用,例如:

 

 1 >>> 
 2 >>> print(1 < 2 < 3)               #等價於 1 < 2 and 2 < 3
 3 True  4 >>> 
 5 >>> print( 1 < 2 > 3)              #等價於 1 < 2 and 2 > 3
 6 False  7 >>> 
 8 >>> print(1 < 3 > 2)               #等價於 1 < 3 and 3 > 2
 9 True 10 >>> 

 

  

  在Python中,條件表達式不允許使用賦值運算符“=”,避免了其他語言中誤將關系運算符“==”寫作賦值運算符“=”帶來的麻煩,例如,下面的代碼在條件表達式中使用賦值運算符“=”將拋出異常,提示語法錯誤。

 

1 >>> 
2 >>> if a = 3:       #條件表達式中不允許使用賦值運算符
3     
4 SyntaxError: invalid syntax 5 >>> 
6 >>> if (a = 3) and (a = 4): 7     
8 SyntaxError: invalid syntax 9 >>> 

 

 

  比較特殊的運算符還有邏輯運算符and 和 or,這兩個運算符具有短路求值或惰性求值的特點,簡單地說,就是只計算必須計算的表達式的值。以and為例,對於表達式“表達式1 and 表達式2”而言,如果“表達式1”的值為False或其他等價值是,不論表達式2的值是什么,整個表達式的值都是False,此時“表達式2”的值無論是什么都不影響整個表達式的值,因此將不會被計算,從而減少不必要的計算和判斷。另外Python中的邏輯運算符在某些方面和其他語言也有所不同,例如:

 1 >>> 3 and 5
 2 5
 3 >>> 
 4 >>> 3 or 5
 5 3
 6 >>> 
 7 >>> 0 and 5
 8 0  9 >>> 
10 >>> 0 or 5
11 5
12 >>> 
13 >>> not 3
14 False 15 >>> 
16 >>> not 0 17 True 18 >>> 

 

  下面的函數應用指定的分隔符把多個字符串連接成一個字符串,如果用戶沒有指定分隔符則使用逗號。

 

 1 >>> 
 2 >>> def join(chList,sep = None):  3     return (sep or ',').join(chList)    #注意:參數sep不是字符串時會拋出異常
 4 
 5 >>> 
 6 >>> chTest = ['1','2','3','4','5']  7 >>> 
 8 >>> join(chTest)  9 '1,2,3,4,5'
10 >>> 
11 >>> join(chTest,':') 12 '1:2:3:4:5'
13 >>> 
14 >>> join(chTest,' ') 15 '1 2 3 4 5'
16 >>> 
17 >>> 
18 >>> #當然也可以把上面的函數直接定義為下面帶有默認值參數的形式
19 >>> 
20 >>> def join(chList,sep = ','): 21     return sep.join(chList) 22 
23 >>> 

  小技巧:在設計包含多個條件的表達式是,如果鞥能夠大概預測不同條件失敗的概率,並將多個條件根據and 和 or 運算符的短路求值特性來組織順序,可以大幅度提高程序運行效率,減少不必要的計算,這也屬於代碼優化的內容。

  拓展知識:邏輯運算符與常見電路連接方式的相似之處。大家應該都學過高中物理,還記得並聯電路、串聯電路、短路這樣的概念嗎?可以做個簡單類比,or運算符類似於並聯電路,只要一個開關是通的那么燈就是亮的;and運算符類似於串聯電路,必須是所有開關是通的那么燈才是亮的;not運算符類似於短路電路,如果開關通了那么燈就滅了,入托 3-1 所示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM