Python學(xué)習(xí)筆記(八)返回函數(shù)

1)函數(shù)作為返回值,調(diào)用函數(shù)f時(shí),才真正計(jì)算求和的結(jié)果:f()

2)請(qǐng)?jiān)僮⒁庖稽c(diǎn),當(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)

>>> f1==f2

False

f1()和f2()的調(diào)用結(jié)果互不影響。

3)返回閉包時(shí)牢記的一點(diǎn)就是:返回函數(shù)不要引用任何循環(huán)變量,或者后續(xù)會(huì)發(fā)生變化的變量。——解決方法是再創(chuàng)建一個(gè)函數(shù),用該函數(shù)的參數(shù)綁定循環(huán)變量當(dāng)前的值,無論該循環(huán)變量后續(xù)如何更改,已綁定到函數(shù)參數(shù)的值不變

舉例



def count():

? ? fs = []

? ? for i in range(1, 4):

? ? ? ? def f():

? ? ? ? ? ? return i*i

? ? ? ? fs.append(f) ?#注意到這里f是作為一個(gè)函數(shù)加入的

? ? return fs

f1, f2, f3 = count()



>>> f1()

9

>>> f2()

9

>>> f3()

9


后:將變量和函數(shù)綁定

def count():

? ? def f(j):

? ? ? ? def g():

? ? ? ? ? ? return j*j

? ? ? ? return g

? ? ?fs = []

? ? ?for i in range(1, 4):

? ? ? ? fs.append(f(i)) ? ? ?# f(i)立刻被執(zhí)行,因此i的當(dāng)前值被傳入f()

? ? ?return fs

fs.append(f(i))傳入的f(i)會(huì)首先被進(jìn)行函數(shù)計(jì)算,然后f(i)的返回值,也就是函數(shù)g作為fs.append()的參數(shù)傳入,所以最終傳入的參數(shù)是函數(shù)g,仍是一個(gè)函數(shù)。最終fs.append()接收到的參數(shù)是f(i)的返回值


>>> f1, f2, f3 = count()

>>> f1()

1

>>> f2()

4

>>> f3()

9

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

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

  • 基礎(chǔ)1.r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義2.'''...'''表示多行內(nèi)容3. 布爾值:True、False(...
    neo已經(jīng)被使用閱讀 1,888評(píng)論 0 5
  • 轉(zhuǎn)載自:http://mp.weixin.qq.com/s/a4mO0lU90pjiGKSlYohq7g 姓名:梅...
    虐先森閱讀 1,658評(píng)論 0 2
  • 閉包 所謂閉包,就是將組成函數(shù)的語句和這些語句的執(zhí)行環(huán)境打包在一起時(shí),得到的對(duì)象。 栗子1 上面這個(gè)函數(shù)有點(diǎn)糾結(jié)!...
    MJXH閱讀 400評(píng)論 0 0
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 4,054評(píng)論 0 7
  • 1、函數(shù)作為返回值 高階函數(shù)除了可以接受函數(shù)作為參數(shù)外,還可以把函數(shù)作為結(jié)果值返回。如下所示:def lazy_s...
    bjchenli閱讀 237評(píng)論 0 0

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