python返回函式 python中返回函式

2021-10-11 00:10:01 字數 1372 閱讀 5965

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...