Python 去劍式 種種變化,用以體演總訣。共有三百六十種變化。 用以破解普天下各門各派的劍法。「破劍式」雖只一式,但其中於天下各門各派劍法要義兼收並蓄;雖說「無招」卻是以普天下劍法之招數為根基,因而其變化之多端不遜於總決式。 摘自金庸 《笑傲江湖》 前兩章介紹了python的基本的語法格式---... ...
Python 去劍式
種種變化,用以體演總訣。共有三百六十種變化。
用以破解普天下各門各派的劍法。「破劍式」雖只一式,但其中於天下各門各派劍法要義兼收並蓄;雖說「無招」卻是以普天下劍法之招數為根基,因而其變化之多端不遜於總決式。
摘自金庸 《笑傲江湖》
前兩章介紹了python的基本的語法格式----代碼塊的使用和python的簡單介紹。
本章會介紹python的 控制語句的語法形式。
在任何一種電腦語言中,學會如何聲明、使用變數 , 學會如何使用控制語句。做到這兩點,就算是入門了。在Python 變數的聲明不需要掌握,也就是說:現在瞭解如何使用控制語句就行了。
控制語句只有三種:
迴圈(while for)、選擇(if-elise)、轉向(break,continiue)
實際上,我們使用所有的程式邏輯都是由以上三種語句構成的。這三種語句構成了各種程式。是不是有點像獨孤九劍的總訣式----種種變化,用以體演總訣。共有三百六十種變化。
1條件語句
1.1 簡單條件語句
if <expression> :
if_suite # if語句中的代碼塊
1.2 if-else結構
if <expression> :
if_suite #
else:
else_suite ##
1.3 if-elseif 語句(多重分支判斷)
if <expression>:
if-suite
elif <expression>:
elif--suite
else:
else_suite
1.4 雞肋部分
在看條件語句的時候,你也許會問:python有沒有 三目運算符 ? 個人一直認為三目運算是一個雞肋。java和c++都有,但是很少會有人用到。
python在很長一段時間內是沒有三目的。 Guido Van Rossum 本人也是一直拒絕加入這樣的功能,因為他認為應該保持代碼簡單,讓程式員不易出錯。但是許多年之後,他發現自己錯了,主要因為在這幾年裡人們試著使用and和or來模擬三目運算符,而且大多數都是錯誤的。於是,他本人給出了一個比較合理的解決方案:
C?X:Y 是一個三元運算符的表達式。那麼,在python中應該寫成:
if C :
x
else :
Y
答案是錯的。
----》 Guido Van Rossum 本人覺得正確的應該是:
X if C else Y ###PS看的是不是比較怪異;
demo:
在比較大小的時候:
res = x if x<y else y
print res
2迴圈語句
2.1 while迴圈
while語句我就不多說了,使用的形式基本一樣。
while <exp> :
while-suite
還有一個像C++ 一樣的東西:無線迴圈
2.2 for迴圈
在python中for迴圈和傳統的c、C++的for迴圈(計數器迴圈)不太一樣,它更像是shell腳本或者js中的for-each的迭代迴圈。(有點像java的增強for迴圈)
python中的for接受可迭代對象作為參數,每次迭代其中的一個元素。
For提供了python中最強大的迴圈結構。它可以遍歷序列的成員,可以用在解析和生成器的表達式中,他會自動的調用迭代器的next()函數。這一點和java的增強for迴圈是一樣的。
例如:
在java中是這樣寫的:
在python中是:
運行的效果:
2.2.1 for使用方法:
本節敘述一下for的簡單使用方法:
1. 用於序列類型的迭代
這裡需要說明一下:
len()函數是獲取集合的大小。
Range()用於可以迭代。
2. 用於迭代器類型
3. 通過range()函數迭代
range()提供了兩種不同的方法類調用。完整的語法是:
range(start, end , step=1 )
step是步長,start是一個是起始,end是結束的
range(end)
細說xrange與range
Xrange類似於range , 不過當你有一個很大範圍的;列表時,xrange更為合適。因為Xrange不會在記憶體里創建列表的完整copy ,他的性能遠遠高出range,xragne返回的是一個迭代對象。
兩者使用方法相同,不再贅述。
4. 關於for的總結
在此希望大家來看看 xrange()和range()函數。。。。。不再贅述。
Break與continue、pass
在python中break的作用類似於C、java語言: 用於跳出當前的迴圈。
例如:
而continiue用於終止本次迴圈,並忽略continiue作用的語句,然後回到迴圈的頂端。
例如:
Pass 語句:
由於python沒有使用傳統的{}類標記代碼快,所以有些地方在語法上要求要有代碼,而python中沒有對用的空的代碼快或者是; 號 ,如果你在需要寫代碼快(code block)的地方空著,不寫任何語句,python解釋器會提示你語法錯誤。 這就很尷尬了。我的天哪,怎麼沒有{}和; ,這讓我怎麼寫空語句???
沒關係,python的設計者早已替你想好了對策: 使用pass語句,他不做任何事情---NOP(No OPeration)。同時pass也可以作為開發的小技巧,標記你後來要完成的代碼。
例如:
再看else
在python中,else不僅可以與if連用,還可以與while一起使用。
while expression :
語句塊
else :
Else語句塊
再看迭代器
迭代器是在python2.2的時候添加的功能,他為類序列對象提供了一個類序列的介面。實際上,學過設計模式的我們,應該知道:迭代器模式。
設計模式中是這樣解釋的:
迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。
當你需要訪問一個聚合對象,而且不管這些對象是什麼都需要遍歷的時候,就應該考慮使用迭代器模式。另外,當需要對聚集有多種方式遍歷時,可以考慮去使用迭代器模式。迭代器模式為遍歷不同的聚集結構提供如開始、下一個、是否結束、當前哪一項等統一的介面。
在python中,iter(obj )函數會返回一個迭代期對象。使用next()方法迭代。
例如:
這樣會出現異常:
在python中,應該這樣做:
此處使用while+iterate的形式等價與for迴圈。在java中的for-eache也是如此的。