成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇文章帶你搞定Python返回函數(shù)

開發(fā) 后端
返回函數(shù),簡單的說就是返回值是一個函數(shù)。返回的是函數(shù),調(diào)用返回的函數(shù)的時候才會返回結(jié)果。

 [[385647]]

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

返回函數(shù),簡單的說就是返回值是一個函數(shù)。

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

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

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

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

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

來看一個例子:

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

代碼解析:

變量a是函數(shù)closur的一個本地變量,只應(yīng)該存在于函數(shù)運行時,但正因為閉包的特性,將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ù)不要引用任何循環(huán)變量,或者后續(xù)會發(fā)生變化的變量。

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

方法是再創(chuàng)建一個函數(shù),用該函數(shù)的參數(shù)綁定循環(huán)變量當(dāng)前的值,無論該循環(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.  
  4. print(f2()) 
  5. print(f3()) 

注:

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

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

三、拓展

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() 

因為使用nonlocal后,返回了閉包中有父函數(shù)的變量,所以父函數(shù)那里不會被回收。

四、總結(jié)

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

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

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

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

 

責(zé)任編輯:武曉燕 來源: Go語言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2021-05-15 10:16:14

Python匿名函數(shù)

2024-04-17 13:21:02

Python匿名函數(shù)

2020-02-28 11:29:00

ElasticSear概念類比

2021-11-17 10:11:08

PythonLogging模塊

2021-11-10 09:19:41

PythonShutil模塊

2022-05-28 15:59:55

PythonPandas數(shù)據(jù)可視化

2021-04-24 10:19:41

Python函數(shù)指向

2025-02-19 10:39:26

Python高階函數(shù)函數(shù)名

2021-03-24 10:00:32

Python遞歸函數(shù)Python基礎(chǔ)

2021-01-29 18:41:16

JavaScript函數(shù)語法

2022-03-30 10:51:40

JavaScript性能調(diào)優(yōu)

2021-11-13 10:11:45

Pythonurllib庫Python基礎(chǔ)

2023-06-15 10:11:08

JavaScript函數(shù)表達(dá)式

2021-05-15 09:18:04

Python進(jìn)程

2021-03-15 08:38:42

StringBuffeJava基礎(chǔ)Java開發(fā)

2022-02-21 09:44:45

Git開源分布式

2021-06-30 00:20:12

Hangfire.NET平臺

2023-05-12 08:19:12

Netty程序框架

2021-05-21 09:01:29

JavaScript 前端函數(shù)閉包

2021-05-31 08:59:57

Java數(shù)據(jù)庫訪問JDBC
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 婷婷久久精品一区二区 | 中文字幕在线一区 | 99久久免费精品 | 免费成人高清在线视频 | 99re热精品视频 | 污视频免费在线观看 | 国产精品精品久久久 | 色妞av| 美女露尿口视频 | 污污免费网站 | 午夜资源| 色黄网站| 365夜爽爽欧美性午夜免费视频 | 夜夜骑首页| 在线伊人网| 国产精品视频网 | 亚洲精品2 | 亚洲91精品| 黄色三级免费网站 | 二区在线视频 | av网站在线免费观看 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 日韩亚洲一区二区 | 波多野结衣av中文字幕 | 精品国产色 | 久久久性色精品国产免费观看 | 日韩一区二区在线视频 | 91视频在线| 欧美日韩国产精品激情在线播放 | 91五月天 | 欧美自拍日韩 | 在线精品一区二区三区 | 成年视频在线观看福利资源 | 51ⅴ精品国产91久久久久久 | 高清国产一区二区 | 精品伊人 | 亚洲成人午夜电影 | 午夜影院网站 | 亚洲网在线 | 先锋资源在线 | 国产精品亚洲第一 |