python的函式不但可以返回int、str、list、dict等資料型別,還可以返回函式!
例如,定義乙個函式 f(),我們讓它返回乙個函式 g,可以這樣寫:
deff():print 'call f()...'
#定義函式g:
defg():print 'call g()...'
#返回函式g:
return g
仔細觀察上面的函式定義,我們在函式 f 內部又定義了乙個函式 g。由於函式 g 也是乙個物件,函式名 g 就是指向函式 g 的變數,所以,最外層函式 f 可以返回變數 g,也就是函式 g 本身。
呼叫函式 f,我們會得到 f 返回的乙個函式:
>>> x = f() #呼叫f()
call f()...>>> x #變數x是f()返回的函式:
>>> x() #x指向函式,因此可以呼叫
call g()... #呼叫x()就是執行g()函式定義的**
請注意區分返回函式和返回值:
defmyabs():return abs #返回函式
defmyabs2(x):return abs(x) #返回函式呼叫的結果,返回值是乙個數值
返回函式可以把一些計算延遲執行。例如,如果定義乙個普通的求和函式:
defcalc_sum(lst):return sum(lst)
呼叫calc_sum()函式時,將立刻計算並得到結果:
>>> calc_sum([1, 2, 3, 4])10
但是,如果返回乙個函式,就可以「延遲計算」:
defcalc_sum(lst):deflazy_sum():returnsum(lst)return lazy_sum
# 呼叫calc_sum()並沒有計算出結果,而是返回函式:
>>> f = calc_sum([1, 2, 3, 4])>>>f
# 對返回的函式進行呼叫時,才計算出結果:
>>>f()10
由於可以返回函式,我們在後續**裡就可以決定到底要不要呼叫該函式。
練習:編寫乙個函式calc_prod(lst),它接收乙個list,返回乙個函式,返回函式可以計算引數的乘積。
defcalc_prod(lst):defcal():return reduce(lambda x,y:x*y,lst)returncal
f= calc_prod([1, 2, 3, 4])print f()
另一種方法返回list中各元素的乘積:
defcalc_prod(lst):defcal():return map(lambda x:x*x,lst)returncal
f= calc_prod([1, 2, 3, 4])print f()
結果:map函式返回結果:
[1, 4, 9, 16]
python返回 python 返回函式
返回函式 1.高階函式除了能夠接收函式作為引數外,還能把函式作為結果返回 2.例如乙個求和函式,通常情況下的定義以及呼叫 def sum nums x 0for n in nums x x n return x sum 1,2,3,4,5 不返回求和的結果,而是返回求和的函式 def sum 1 n...
python 返回函式
返回函式 python的函式不但可以返回int str list dict等資料型別,還可以返回函式!例如,定義乙個函式 f 我們讓它返回乙個函式 g,可以這樣寫 deff print call f 定義函式g defg print call g 返回函式g return g仔細觀察上面的函式定義,...
python 返回函式
實現乙個可變引數的求和。通常情況下,求和的函式是這樣定義的 def calc sum args ax 0 for n in args ax ax n return ax但是,如果不需要立刻求和,而是在後面的 中,根據需要再計算怎麼辦?可以不返回求和的結果,而是返回求和的函式 def lazy sum...