日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
一篇文章帶你搞定Python返回函數(shù)

一、什么是返回函數(shù)?

返回函數(shù),簡(jiǎn)單的說(shuō)就是返回值是一個(gè)函數(shù)。

返回的是函數(shù),調(diào)用返回的函數(shù)的時(shí)候才會(huì)返回結(jié)果。

二、閉包 (以返回函數(shù)的形式實(shí)現(xiàn))

相關(guān)參數(shù)和變量都保存在返回的函數(shù)中,這種稱為“閉包(Closure)”。

 
 
 
 
  1. def returnre(a, b):
  2.     def re():
  3.         return a + b
  4.     return re
  5. test01 = returnre(1, 2)
  6. test02 = returnre(1, 2)
  7. print(test01 == test02)  # 每次調(diào)用都會(huì)返回新生成的函數(shù)

比如上面例子的re函數(shù)閉包的特性,嵌套定義在非全局作用域里面的函數(shù),能夠記住它在被定義的時(shí)候它所處的封閉命名空間。

來(lái)看一個(gè)例子:

 
 
 
 
  1. def closur(a):
  2.     def myprint():
  3.         print(a)
  4.     return myprint
  5. test = closur(1)
  6. test()

代碼解析:

變量a是函數(shù)closur的一個(gè)本地變量,只應(yīng)該存在于函數(shù)運(yùn)行時(shí),但正因?yàn)殚]包的特性,將a的值封裝進(jìn)了返回函數(shù)。

 
 
 
 
  1. def closuretest02(*args):
  2.     f = []
  3.     for i in args:
  4.         def test():
  5.             return i**2
  6.         f.append(test)
  7.     return f
  8. test = closuretest02(1,2,3,4)
  9. for i in test:
  10.     print(i())

返回閉包時(shí)牢記的一點(diǎn)就是:

返回函數(shù)不要引用任何循環(huán)變量,或者后續(xù)會(huì)發(fā)生變化的變量。

如果一定要引用循環(huán)變量怎么辦?

方法是再創(chuàng)建一個(gè)函數(shù),用該函數(shù)的參數(shù)綁定循環(huán)變量當(dāng)前的值,無(wú)論該循環(huán)變量后續(xù)如何更改,已綁定到函數(shù)參數(shù)的值不變:

 
 
 
 
  1. def count():
  2.     def f(j):
  3.         def g():
  4.             return j*j
  5.         return g
  6.     fs = []
  7.     for i in range(1, 4):
  8.         fs.append(f(i)) # f(i)立刻被執(zhí)行,因此i的當(dāng)前值被傳入f()
  9.     return fs

再看看結(jié)果:

 
 
 
 
  1. f1, f2, f3 = count()
  2. print(f1())
  3. print(f2())
  4. print(f3())

注:

缺點(diǎn)是代碼較長(zhǎng),可利用lambda函數(shù)縮短代碼。

一個(gè)函數(shù)可以返回一個(gè)計(jì)算結(jié)果,也可以返回一個(gè)函數(shù)。返回一個(gè)函數(shù)時(shí),牢記該函數(shù)并未執(zhí)行,返回函數(shù)中不要引用任何可能會(huì)變化的變量。

三、拓展

nonlocal

nonlocal適用于嵌套函數(shù)中內(nèi)部函數(shù)修改外部變量的值。

 
 
 
 
  1. def outside():
  2.     a = 1
  3.     print('outside' + str(id(a)))
  4.     def inside():
  5.         nonlocal a
  6.         print('inside ' + str(id(a)))
  7.     inside()
  8. outside()

因?yàn)槭褂胣onlocal后,返回了閉包中有父函數(shù)的變量,所以父函數(shù)那里不會(huì)被回收。

四、總結(jié)

本文基于Python基礎(chǔ),介紹了返回函數(shù)。常見(jiàn)的返回函數(shù)的應(yīng)用。函數(shù)作為返回值,閉包在實(shí)際應(yīng)用中需要的點(diǎn),遇到的難點(diǎn),提供有效的解決方案。使用Python語(yǔ)言,能夠更好的理解。

歡迎大家積極嘗試,有時(shí)候看到別人實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,但是到自己動(dòng)手實(shí)現(xiàn)的時(shí)候,總會(huì)有各種各樣的問(wèn)題,切勿眼高手低,勤動(dòng)手,才可以理解的更加深刻。

代碼很簡(jiǎn)單,希望對(duì)你學(xué)習(xí)有幫助。

本文轉(zhuǎn)載自微信公眾號(hào)「Go語(yǔ)言進(jìn)階學(xué)習(xí)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go語(yǔ)言進(jìn)階學(xué)習(xí)公眾號(hào)。


分享名稱:一篇文章帶你搞定Python返回函數(shù)
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/cdeoggd.html