首頁  >  文章  >  後端開發  >  python支援傳回函數的實例解析

python支援傳回函數的實例解析

零到壹度
零到壹度原創
2018-04-03 10:47:051622瀏覽

這篇文章主要介紹了python支援回傳函數的實例解析,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近接觸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()

               

相關建議:


########################################################################################################################################################################## #######python傳回函數/函數程式設計###################關於函數傳回值的幾種情況##########

以上是python支援傳回函數的實例解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn