python學習的第七天(五) 返回函式詳解

2021-10-07 07:29:18 字數 1228 閱讀 9294

高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。

首先看看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...