Python學習筆記整理(十)Python的if測試


if語句是選取要執行的操作.
一、if語句
1、通用格式
形式是if測試,后面跟着一個或多個可選的elif(else if)測試,以及一個最終選用的else塊。測試和else部分可以結合嵌套語句塊,縮進列在行首下面。Python會執行第一個結算結果為真的代碼塊,或者如果所有測試都為假時,就執行else塊。
if語句一般形式如下:
if <test1>:
    <statements1>
elif <test2>:
    <statements2>
else:
    <statements3>
2、基本列子
除了開頭的if測試及其關聯的語句外,其他所有部分都是可選擇。
>>> if 1:
...  print 'True'
...
True
需要處理測試為假的情況,需要else。else就是所有測試條件都不滿足情況下的默認選擇
>>> if not 1:      
...     print 'true'
... else:
...     print 'false'
...
false

3、多路分支
>>> x='killer rabbit'        
>>> if x == 'roger':           
...     print "how's jessica?"
... elif x == 'bugs':        
...     print "what's up doc?"
... else:
...     print "Run away!"*2  
...
Run away!Run away!
Ptyhon中沒有swith和case語句。在Ptyhon多路分支寫成一系列的if/elif測試。或者對字典進行索引運算或者搜索列表。因為字典和列表可以在運行時創建,有時會比硬編碼的if邏輯更具有靈活性.
>>> choice='ham' 
>>> print {'spam':1.25,
...        'ham': 1.99,
...        'eggs':0.99,
...        'bacon':1.10}[choice]
1.99
這個字典是多路分支,根據鍵的選擇進行索引,在分支到這組值的其中一個。比起C語言的switch,兩者等效,也可以使用Python語句表達。不過使用if表達不夠簡潔。
字典默認值能夠通過has_keys測試,get方法調用或異常捕捉來處理。在字典式的多路分支中用於編寫默認動作。這里通過get支持處理默認值
的情況
>>> Ptest={'name':'diege','age':18,'sex':'M'}
>>> print Ptest.get('name','Bad choice')
diege
>>> print Ptest.get('class','Bad choice')     
Bad choice
后面會學到字典也可以包含函數,從而代表更為復雜的分支動作,並實現一般的跳躍表格。這類函數做為字典的值,通常寫成lamdba,通過增加括號調用來觸發器動作
再來一個例子

###對比shell中的條件表達式######
if  [test1]
then
        do something1
elif [test2]
then
    do something2
else
        do something3
fi
二、Python語法規則
Python都有簡單和基本的語句語法,但是,有些特定是我們需要知道的。
* 語句是逐個運行,除非你不這樣寫
* 塊和語句的邊際會自動被檢測
* 復合語句=首行+“:”+縮進語句
* 空白行,空格,以及注釋通常都會被忽略。
* 文檔字符串(docstring)會被忽略,但會被保存並由工具顯示。
Pyton支持另外一種注釋,稱為文檔字符串。
1、代碼塊分隔符
自動以行縮進檢測塊的邊際。縮進至右側相同距離的所有語句屬於同一塊的代碼。塊內的語句都會垂直對齊,好像是在一個欄之內。
2、語句分隔符
Python的語句一般都是在其所在行的末尾結束的,不過,當語句太長了,難以單放在一行時,有些特殊的規則可以用於其位於多行之中。
1)如果使用語法括號對,語句就可以橫跨數行。如在封閉的(),{},[]這類配對中編寫代碼。緊接着的行可以在任何縮進層次開始,而且應該全部垂直對齊。
2) 如果語句以反斜線結尾,就可以橫跨數行。
3)三重引號字符串常量可以橫跨數行
4)其他規則:有關語句分隔符。注釋和空白也能出現在文件的任意之處。注釋則出現在行的末尾終止
3、一些特殊情況
if (a==b and c==d and
    d==e and ee==f):
    print "new"
Python允許在相同行上編寫一個以上的非復合語句(語句內未嵌套其他語句),有分號隔開。
>>> x=3;y=2;print x*y
6
三、真值測試
在Python中:
* 任何非0數字或非空對象對象都是真
* 數字0,空對象以及特殊對象None都被認作是假
* 比較和相等測試會遞歸地應用在數據結構中。
* 比較和相等測試會返回True或False(1和0的特殊版本)
* 布爾and和or運算符會返回真或假的操作對象
布爾運算符是用於結合其他測試的結果,Python中有三種布爾表達式運算符:
X and Y
    如果X和Y都為真,就是真
X or Y
    如果X或Y為真,就是真
not X
    如果X為假,那就為真(表達式返回True或False)
X和Y可以是任何真值或返回真值的表達式(如相等測試,范圍比較等)。此外布爾and和or運算符在Python中返回真或假對象,
而不是True或False.返回and或or運算符左側或者右側的對象。(注意:每一個對象不是真就是假)
對or而言,從左到右求運算操作對象,然后返回第一個為真的操作對象。Ptyhon會在其找到第一個真值地方停止。【如果沒有為真的呢?】
對and而言,計算所有為真時才會真,返回最后一個為真的對象。停止在第一個為假的對象上
1、if/else三元表達式
Python2.5引入的新的表達式
A=Y if X else Z
只有當X為真時才會執行表達式Y,而只有當X為假時,才會執行表達式Z
>>> A='t' if 'diege' else 'f'
>>> A
't'
>>> A='t' if '' else 'f'    
>>> A
'f'

>>> x=""            
>>> y=1
>>> z=2
>>> y if x else z
2
>>> x=9 
>>> y if x else z
1

2.5版本以前,相同效果可以小心使用and和or
A=((X and Y) or Z)
使用下列表達式也類似的,因為bool函數會把X轉換成對應的整數1或0,然后用於從列表中挑選真假值。
A=[Z,Y][bool(X)]
>>> ['f','t'][bool("")]
'f'
C的語法,也是shell的
Y?X:Z
2、為什么要在意布爾值
X=A or B or C or None
這樣的語句會把X設置A,B以及C中第一個非空(為真)的對象,或者如果所有對象都未空,就設置為None.
這樣可行是因為or運算符返回兩對象之一。這成為Python中相當常見的編寫代碼手法:從一個固定大小的集合中選擇非空的對象只要在其串在一個or表達式中即可。
短路計算也很重要,因為布爾運算右側的表達式肯能會調用函數來執行實質或重要的工作。不然,如果短路規則生效,附加效果就不會發生了。
if f1() or f2():...
這里如果f1返回真值(非空),python將不會再執行f2(),為了保證兩個函數都會執行,要再or之前調用它們。
tmp1,tmp2=f1(),f2()
if tmp1 or tmp2:...

用來模擬if/else語句:((A and B) or C )
假定B真,A為真返回B【A,B都為真返回B,B為真,直接返回B,不計算C】,如果不是指返回C

最后,因為所有對象本質都是真或假,Python中,直接測試對象 ( if X:),而不是和空值比較(if X !='':), 前者更常見也更簡單,就字符串而言,測試是等效的。

 
 


免責聲明!

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



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