【python】返回函數(shù)

返回函數(shù)

1)普通的函數(shù)返回一個(gè)值,返回函數(shù)則是把函數(shù)作為結(jié)果值返回
為什么要返回函數(shù):不需要立刻求和,而是在后面的代碼中,根據(jù)需要再計(jì)算,這樣就先返回求和的函數(shù)。(這樣迂回的手段,聽起來就好像為了優(yōu)化代碼。。。)

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum

2)當(dāng)我們調(diào)用lazy_sum(1, 3, 5, 7, 9)時(shí),返回的并不是求和結(jié)果,而是求和函數(shù):

>>> f = lazy_sum(1, 3, 5, 7, 9)
>>> f
<function lazy_sum.<locals>.sum at 0x101c6ed90>

因?yàn)閘azy_sum()函數(shù)return sum意思就是,無論lazy_sum(1, 3, 5, 7, 9)括號(hào)里寫成什么,它都不會(huì)先計(jì)算,而是先返回一個(gè)sum函數(shù),這個(gè)時(shí)候參數(shù)以及被包含在里面了。f = lazy_sum(1, 3, 5, 7, 9)意思是,將函數(shù)返回的sum這個(gè)函數(shù)對(duì)象賦值給了f,而不是調(diào)用了sum函數(shù),所以>>> f會(huì)返回一個(gè)類似內(nèi)存地址一樣的東西。
3)關(guān)于 f 和 f():函數(shù)對(duì)象VS函數(shù)調(diào)用,鑒于一開始也混淆了,所以還是要強(qiáng)行解釋一波
把函數(shù)賦值給新的標(biāo)識(shí)符或作為參數(shù)傳遞給新的函數(shù),針對(duì)的都是函數(shù)對(duì)象本身,而不是函數(shù)的調(diào)用。

def func():
    return "hello,world"
ref1 = func      #將函數(shù)對(duì)象賦值給ref1  賦值的結(jié)果是函數(shù) ,可調(diào)用
ref2 = func()  #調(diào)用函數(shù),將函數(shù)的返回值("hello,world"字符串)賦值給ref2 賦值的結(jié)果是str,不可調(diào)用

所以,回答上面關(guān)于f = lazy_sum(1, 3, 5, 7, 9)的情況上面,可以寫成print(lazy_sum(1,3,5,7,9)())這個(gè)樣子。
4)注意:當(dāng)我們調(diào)用lazy_sum()時(shí),每次調(diào)用都會(huì)返回一個(gè)新的函數(shù),即使傳入相同的參數(shù):

>>> f1 = lazy_sum(1,3,5,7,9)
>>> f2 = lazy_sum(1,3,5,7,9)
>>> print(f1==f2)
False

在函數(shù)lazy_sum中又定義了函數(shù)sum,并且,內(nèi)部函數(shù)sum可以引用外部函數(shù)lazy_sum的參數(shù)和局部變量,當(dāng)lazy_sum返回函數(shù)sum時(shí),相關(guān)參數(shù)和變量都保存在返回的函數(shù)中,這種稱為“閉包(Closure)”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)作為返回值 高階函數(shù)除了可以接受函數(shù)作為參數(shù)外,還可以把函數(shù)作為結(jié)果值返回。 我們來實(shí)現(xiàn)一個(gè)可變參數(shù)的求和。通...
    喵在野閱讀 332評(píng)論 0 1
  • 返回函數(shù) 函數(shù)作為返回值。 調(diào)用A時(shí),返回函數(shù)a,調(diào)用a時(shí),返回值 閉包在函數(shù)里又定義了新函數(shù),內(nèi)部函數(shù)可以引用外...
    某米狼閱讀 844評(píng)論 0 1
  • 要點(diǎn): 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個(gè)“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍?、屬性?..
    victorsungo閱讀 1,694評(píng)論 0 6
  • 函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此,任意一個(gè)函數(shù),只要輸入是確...
    齊天大圣李圣杰閱讀 1,631評(píng)論 0 2
  • Python進(jìn)階框架 希望大家喜歡,點(diǎn)贊哦首先感謝廖雪峰老師對(duì)于該課程的講解 一、函數(shù)式編程 1.1 函數(shù)式編程簡...
    Gaolex閱讀 5,973評(píng)論 6 53

友情鏈接更多精彩內(nèi)容