11.9 遞迴
如果乙個新的呼叫能在相同過程中較早的呼叫結束之前開始,那麼該過程就是遞迴。
>>> def factorial(num):
... if num == 1:
... return num
... else:
... return num * factorial(num-1)
...
>>> factorial(20)
2432902008176640000l
>>> factorial(4)
24>>>
11.10 生成器
什麼是python式的生成器?從語法上講,生成器是乙個帶yield語句的函式。乙個函式或者子程式只返回一次,但乙個生成器能暫停執行並返回乙個中間的結果——那就是yield語句的功能,返回乙個值給呼叫者並暫停執行。當生成器的next()方法被呼叫的時候,它會準確地從離開地方繼續。
>>> def ******_gen():
... yield 1
... yield 'haha'
...
>>> for i in ******_gen():
... print i
...
1haha
>>>
11.10.2 加強的生成器特性
在python2.5中, 一些新特性加入到生成器中,所以除了next()來獲得下個生成的值,使用者可以將值回送給生成器[send()],在生成器中丟擲異常,以及要求生成器推出[close()]。
>>> def counter(start_at = 0):
... count = start_at
... while true:
... val = (yield count)
... if val is not none:
... count = val
... else:
... count += 1
...
>>> count = counter()
>>> count.next()
0>>> count.next()
1>>> count.send(100)
100>>> count.next()
101>>> count.close()
>>> count.next()
traceback (most recent call last):
file "", line 1, in
stopiteration
>>>
第11章 函式和函式式程式設計 1
11.1 什麼是函式?11.1.2 返回值和函式型別 把過程看待成函式的語言通常對於 什麼都不返回 的函式設定了特殊的型別或者值的名字。這些函式在c中預設為 void 的返回型別,意思是沒有值返回。在python中,對應的返回物件型別是none。當沒有顯式地返回元素或者如果返回none時,pytho...
第11章 函式和函式式程式設計 2
11.3.6 函式 與方法 裝飾器 裝飾器是在函式呼叫之上的修飾。這些修飾僅是當宣告乙個函式或者方法的時候,才會應用的額外呼叫。裝飾器的語法以 開頭,接著是裝飾器函式的名字和可選的引數。緊跟著裝飾器宣告的是被修飾的函式和裝飾函式的可選引數。decorator dec opt args def fun...
第11章 函式
1 把相關的語句組合在一起,並且賦予相應的名稱,用這種方法來給程式分塊,這種形式的組合就是函式,函式也叫例程或者過程。程式總是從 main 函式開始啟動。函式由函式名 引數 返回值型別以及一組包含操作語句的語句塊組成。函式可以支援過載,程式就是由函式組成。2 形參是函式定義時在形參表中定義的,並且由...