python-返回函式的理解
阿新 • • 發佈:2019-02-17
最近接觸python,看到了python中返回函式的概念,以前只接觸過函式返回值,比如python就可以返回int,str,list,dict等等型別資料,這裡要說的是python還支援返回函式。
首先看看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就是上面一個最外層函式返回的函式(不是函式值)
<function g at 0x1037bf320>
>>> x() # x指向函式,因此可以呼叫,這裡就是呼叫內層函式x()的過程
call g()... # 呼叫x()就是執行g()函式定義的程式碼
- 只返回函式的作用:
返回函式可以把一些計算延遲執行。例如,如果定義一個普通的求和函式:
def calc_sum(lst):
return sum(lst)
>>>calc_sum([1,2,3,4])
結果直接是:10
但是,可以通過返回函式思想寫程式碼,就可以“延時計算”
def calc_sum(lst):
def lazy_sum():
return sum(lst)
return lazy_sum
下面是呼叫:
注意,下面程式碼並沒有對函式進行執行計算出結果,而是返回函式。
>>> f = calc_sum([1, 2, 3, 4])
>>> f
<function lazy_sum at 0x1037bfaa0>
對返回的函式進行呼叫時,才計算出結果
>>>f()
10
下面是一個例子:
請編寫一個函式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()