python中返回函數

來源:互聯網
上載者:User

標籤:數值   ...   代碼   延遲   編寫   函數調用   區分   turn   class   

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   # 變數x是f()返回的函數:<function g at 0x1037bf320>>>> x()   # x指向函數,因此可以調用call g()...   # 調用x()就是執行g()函數定義的代碼

請注意區分返回函數和傳回值:

def myabs():    return abs   # 返回函數def myabs2(x):    return abs(x)   # 返回函數調用的結果,傳回值是一個數值

返回函數可以把一些計算順延強制。例如,如果定義一個普通的求和函數:

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<function lazy_sum at 0x1037bfaa0>

# 對返回的函數進行調用時,才計算出結果:

>>> f()10

由於可以返回函數,我們在後續代碼裡就可以決定到底要不要調用該函數。

練習:

編寫一個函數calc_prod(lst),它接收一個list,返回一個函數,返回函數可以計算參數的乘積。

def calc_prod(lst):    def cal():        return reduce(lambda x,y:x*y,lst)    return calf = calc_prod([1, 2, 3, 4])print f()

另一種方法返回list中各元素的乘積:

def calc_prod(lst):    def cal():        return map(lambda x:x*x,lst)    return calf = calc_prod([1, 2, 3, 4])print f()

結果:

24

map函數返回結果:

[1, 4, 9, 16]

 

python中返回函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.