<p>今天終於有時間繼續推動Python Tutorial的進程了。</p> <p>本文主要是對官方Python Tutorial的第4節內容進行的分析。第4節主要是對Python中的一些控流程制語句進行了基本的介紹。</p> <p>Python的if語句和其它語言的意義相似,須要主要的是其採用elif來替代諸如C語言中的else if,這樣設計的意圖是啥?答案是爲了不過多的縮進,別忘了,Python是靠縮進來劃分語句塊的。</p> <p>以後是for語句。Python的for語句可能與通常的高級語言for語句有所不一樣,其形式爲for <em>var </em> in <em>object</em> :  。每一次循環就是遍歷object中的一項。若是你有過一些腳本語言編程的經驗,對此應該並不陌生。</p> <p>對於數字的迭代,Python中的range()函數就會起到很大的功效。range()函數可接受一、2或3個參數。若是是一個參數則表示從0至該參數(不包括該參數)的全部數字;如果兩個參數則表示這兩個參數的數值之間(不包括第二個參數)的全部數字;如果三個參數,則表示從第一個參數的值開始至第二個參數,每相差第三個參數值的全部數字,其中第三個參數能夠爲負數,這時也就須要第一個參數比第二個參數大。任何不符合以上邏輯的都返回的是空。</p> <p>接下來你們一塊兒看一段代碼:</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:d1845ae2-28a3-446a-abad-83a73c91c37b" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: python; gutter: true; first-line: 1; tab-size: 4; toolbar: false; width: 475px; height: 323px;" style=" width: 475px; height: 323px;overflow: auto;">>>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print n, 'equals', x, '*', n/x ... break ... else: ... # loop fell through without finding a factor ... print n, 'is a prime number' ... 2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3 </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>python
<p>這是一個查找2-10以前的素數的程序。這裏的else字句屬於誰呢?根據對齊狀況,你就能夠看出來,這裏的else屬於第一個for語句。也就是當內層循環從2至n-1走了完整一遍後,會執行else子句的內容,而若是if條件成立,則會執行break,從而跳出本次循環,也就不執行else子句。對於這點,你能夠試着將else去掉,將最後一條print語句與第二個for對齊。這時你會發現,此時會在原有輸出不是素數的語句後面,又多了一句 <em>x </em>is a prime number,這就是因爲break跳出的是內層循環,因此顯然其還會執行外層循環的其它語句,而若是加上else,則else是與內層的for綁定在一塊兒的,至關於出現一個for else語句,因此當break跳出時,顯然也就跳出了內層循環的所有,不會執行else語句。(關於以上的解釋,若是你們認爲不妥,或者有更好地理解方式,歡迎討論)</p>編程
<p>固然continue就是結束當前這一次迭代,直接進行下一次迭代,並非直接跳出本層。</p>app
<p>Python中還有空語句pass。該語句不作任何事情,其能夠在您還沒想好作些什麼時用來佔位使用,以使你的程序在語法上符合規則。</p>函數
<p>接下來是有關函數定義的內容。def關鍵字用來定義函數,基本的介紹在本文中就很少說了,這裏想說明一下幾點:每當一個函數被調用時,其都會創建一個本地符號表,全部對變量的賦值都會存儲在本地符號表中,Python中還有全局的符號表。當某個變量被引用後,其會首先查找本地符號表,以後是全局符號表,再以後是系統內建的名字。在一個函數內,雖然能夠對全局變量進行引用,可是不能對一個全局變量直接賦值(除非是對在global語句中定義的變量進行賦值)。</p>oop
<p>Python中能夠對函數名進行重命名,好比有一個函數名叫fib,若執行f = fib,則f也是一個函數,其意義和fib相同。</p>設計
<p>這裏提一下函數和過程的區別。通常來講有返回值的咱們認爲是函數,不然是一個過程。那麼若是咱們在Python中定義了一個「沒有」返回值的function,咱們爲何還叫其函數呢?其實它並非沒有返回值,若是用戶沒有顯式的定義返回值,Python會自動返回None。</p>orm
<p>關於函數的參數,Python中能夠在函數定義時爲參數指定默認值,這裏也請你們注意一下幾點:有默認值的參數只能出如今最後,即有默認值的參數前必須都是沒有默認值的,不能兩種形式混合在一塊兒;指定的默認值只在定義函數的時候被計算一次,假如爲函數指定的默認值是一個變量,那麼若是這個變量在函數定義後被修改,也不影響在定義時指定的默認值。須要注意的是,第二點在默認值爲一些常常改變的對象是不同的,也就是對於諸如列表、字典等這樣的對象,舉個例子:</p>對象
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:ac7a2514-fd3c-40ac-9eb6-bcd1603404ff" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: python; gutter: true; first-line: 1; tab-size: 4; toolbar: false; width: 400px; height: 141px;" style=" width: 400px; height: 141px;overflow: auto;">def f(a, L=[]): L.append(a) return L進程
print f(1) print f(2) print f(3) </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>ci
<p>其輸出的結果爲:</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c98d80cb-7dbe-4f46-bde1-1eae964e985b" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: python; gutter: true; first-line: 1; tab-size: 4; toolbar: false; width: 400px; height: 52px;" style=" width: 400px; height: 52px;overflow: auto;">[1] [1, 2] [1, 2, 3] </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>還有關於參數的不少調用方式:用*操做符能夠解包List型變量做爲參數;用**操做符能夠解包子典型變量做爲參數。另外還有Lambda形式的。這裏不具體說明了,有興趣的能夠查看相關資料,都比較好理解。</p>
<p>第4節最後介紹了有關文檔字符串的內容。在定義一個函數時,咱們能夠在def語句的下方,在成對的」」」內寫一些話,來做爲對這個函數的一些說明,當咱們想查看某個函數的這個說明時,只需執行如下語句:print my_function.__doc__。注意:doc左右是各有兩個下劃線字符。</p>
<p>OK,以上就是Python Tutorial中第4節的主要內容,歡迎你們積極批評指正!</p>