Python學習筆記-返回函式
阿新 • • 發佈:2019-01-25
1:python返回函式
Python的函式不但可以返回int、str、list、dict等資料型別,還可以返回函式!例如,定義一個函式 f(),我們讓它返回一個函式 g,可以這樣寫:
def f():
print 'call f()...'
# 定義函式g:
def g():
print 'call g()...'
# 返回函式g:
return g
在函式 f 內部又定義了一個函式 g。由於函式 g 也是一個物件,函式名 g 就是指向函式 g 的變數,所以,最外層函式 f 可以返回變數 g,也就是函式 g 本身。呼叫函式 f,我們會得到 f 返回的一個函式:
x = f() # 呼叫f(),列印結果call f()...
# 變數x是f()返回的函式:
x() # x指向函式,因此可以呼叫。
#列印結果call g()...
# 呼叫x()就是執行g()函式定義的程式碼
2:請注意區分返回函式和返回值:
def myabs():
return abs # 返回函式
def myabs2(x):
return abs(x) # 返回函式呼叫的結果,返回值是一個數值
3:返回函式可以把一些計算延遲執行。
這點其實是回撥函式。例如,如果定義一個普通的求和函式:
def calc_sum(lst) :
return sum(lst)
呼叫calc_sum()函式時,將立刻計算並得到結果:
calc_sum([1, 2, 3, 4])#返回結果是10,立刻可以得到
但是,如果返回一個函式,就可以“延遲計算”:
def calc_sum(lst):
def lazy_sum():
return sum(lst)
return lazy_sum
呼叫calc_sum()並沒有計算出結果,而是返回函式:
f = calc_sum([1, 2, 3, 4])
f()#呼叫返回函式進行求和計算
4:使用例子
請編寫一個函式calc_prod(lst),它接收一個list,返回一個函式,返回函式可以計算引數的乘積。
# -*- coding: utf-8 -*-
__author__ = 'liujiepeng'
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()
補充reduce:
python中的reduce內建函式是一個二元操作函式,他用來將一個數據集合(連結串列,元組等)中的所有資料進行下列操作:用傳給reduce中的函式 func()(必須是一個二元操作函式)先對集合中的第1,2個數據進行操作,得到的結果再與第三個資料用func()函式運算,最後得到一個結果。所以,上述的連乘操作,需要定義如上:
def f(x, y):
return x * y
return reduce(f, lst, 1)