高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。
首先看看python支援返回函式的基本語法
def f():
print 'call f()...'
# 定義函式g:
def g():
print 'call g()...'
# 返回函式g:
return g
這裡,最外層的函式f會返回乙個函式g,也就是函式g本身;
下面看看函式呼叫的過程;(接上面)
>>> x = f() # 呼叫f()
call f()...
>>> x # 變數x就是上面乙個最外層函式返回的函式(不是函式值)
>>> x() # x指向函式,因此可以呼叫,這裡就是呼叫內層函式x()的過程
call g()... # 呼叫x()就是執行g()函式定義的**
只返回函式的作用:
返回函式可以把一些計算延遲執行。例如,如果定義乙個普通的求和函式:
def calc_sum(lst):
return sum(lst)
>>>calc_sum([1,2,3,4])12
3結果直接是:10
但是,可以通過返回函式思想寫**,就可以「延時計算」
def calc_sum(lst):
def lazy_sum():
return sum(lst)
return lazy_sum12
34下面是呼叫:
注意,下面**並沒有對函式進行執行計算出結果,而是返回函式。
>>> f = calc_sum([1, 2, 3, 4])
>>> f12
3對返回的函式進行呼叫時,才計算出結果
>>>f()101
2下面是乙個例子:
請編寫乙個函式calc_prod(lst),它接收乙個list,返回乙個函式,返回函式可以計算引數的乘積。
思想:先定義能計算乘積的函式,再將此函式返回。
def calc_prod(lst):
def lazy_prod():
def f(x,y):
return x*y
return reduce(f,lst,1)
return lazy_prod
f = calc_prod([1, 2, 3, 4])
print f()
————————————————
學習python第七天
numpy 的屬性 import numpy as np array np.array 1,2,3 4,5,6 7,8,9 定義了乙個二維矩陣 print array print array.ndim 輸出矩陣的維度 print array.shape 輸出矩陣的形狀 print array.siz...
第七天學習
練習題 1 以下類定義中哪些是類屬性,哪些是例項屬性?class c num 0 def init self self.x 4 self.y 5 c.count 62 怎麼定義私有 法?3 嘗試執行以下 並解釋錯誤原因 4 按照以下要求定義乙個遊樂園門票的類,並嘗試計算2個 1個小孩平日票價。要求 ...
學習python的第七天
本節的學習是同時使用argv和raw input向使用者提示一些特別的問題。下一節學習讀寫檔案,這節練習是下一節的基礎,所以得研究清楚。下邊的練習使用raw input打出簡單的 作為提示符,提示使用者輸入。在書中說明這節學習的方式和zork或adventure兩款遊戲類似。zork 練習部分 fr...