標籤:
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數字或非Null 物件對象都是真
* 數字0,Null 物件以及特殊對象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 !=‘‘:), 前者更常見也更簡單,就字串而言,測試是等效的。
Python學習筆記整理(十)Python的if測試