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

一篇文章帶你搞定Python返回函數

開發 后端
返回函數,簡單的說就是返回值是一個函數。返回的是函數,調用返回的函數的時候才會返回結果。

 [[385647]]

一、什么是返回函數?

返回函數,簡單的說就是返回值是一個函數。

返回的是函數,調用返回的函數的時候才會返回結果。

二、閉包 (以返回函數的形式實現)

相關參數和變量都保存在返回的函數中,這種稱為“閉包(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)  # 每次調用都會返回新生成的函數 

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

來看一個例子:

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

代碼解析:

變量a是函數closur的一個本地變量,只應該存在于函數運行時,但正因為閉包的特性,將a的值封裝進了返回函數。

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

返回閉包時牢記的一點就是:

返回函數不要引用任何循環變量,或者后續會發生變化的變量。

如果一定要引用循環變量怎么辦?

方法是再創建一個函數,用該函數的參數綁定循環變量當前的值,無論該循環變量后續如何更改,已綁定到函數參數的值不變:

  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)立刻被執行,因此i的當前值被傳入f() 
  9.     return fs 

再看看結果:

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

注:

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

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

三、拓展

nonlocal

nonlocal適用于嵌套函數中內部函數修改外部變量的值。

  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后,返回了閉包中有父函數的變量,所以父函數那里不會被回收。

四、總結

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

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

代碼很簡單,希望對你學習有幫助。

本文轉載自微信公眾號「Go語言進階學習」,可以通過以下二維碼關注。轉載本文請聯系Go語言進階學習公眾號。

 

責任編輯:武曉燕 來源: Go語言進階學習
相關推薦

2021-05-15 10:16:14

Python匿名函數

2024-04-17 13:21:02

Python匿名函數

2020-02-28 11:29:00

ElasticSear概念類比

2021-11-10 09:19:41

PythonShutil模塊

2021-11-17 10:11:08

PythonLogging模塊

2022-05-28 15:59:55

PythonPandas數據可視化

2021-04-24 10:19:41

Python函數指向

2025-02-19 10:39:26

Python高階函數函數名

2021-03-24 10:00:32

Python遞歸函數Python基礎

2021-01-29 18:41:16

JavaScript函數語法

2022-03-30 10:51:40

JavaScript性能調優

2021-11-13 10:11:45

Pythonurllib庫Python基礎

2023-06-15 10:11:08

JavaScript函數表達式

2021-05-15 09:18:04

Python進程

2021-03-15 08:38:42

StringBuffeJava基礎Java開發

2022-02-21 09:44:45

Git開源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-05-21 09:01:29

JavaScript 前端函數閉包

2021-02-20 10:06:14

語言文件操作
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕91av| 国产精品一区二区久久精品爱微奶 | 成年人免费网站 | 亚洲九九| 中文av电影 | 午夜精品一区二区三区在线观看 | 精品综合久久久 | a级片在线观看 | 国产精品一区二区视频 | 三级成人在线 | 精品欧美色视频网站在线观看 | 久草视频观看 | 日韩精品一区二区三区视频播放 | 国产精品99久久久精品免费观看 | 国产精品一区二区在线观看 | 在线色网址 | 亚洲国产网址 | 精品在线一区 | 91久久精品国产91久久性色tv | 久草综合在线 | 久久99精品久久久97夜夜嗨 | 毛片网站在线观看 | 亚洲精品日韩精品 | 午夜成人免费视频 | 日韩一三区 | 91精品国产综合久久久久 | 在线激情视频 | 欧美 日韩 国产 成人 在线 | 国产精品99久久久久久宅男 | 91人人看| 欧美日韩国产高清视频 | 视频一区中文字幕 | 最近中文字幕在线视频1 | 成人精品一区二区三区中文字幕 | 狠狠狠 | 国产精品自拍视频 | 一区二区三区欧美在线观看 | 精品视频在线观看 | 自拍偷拍中文字幕 | 国产精品久久久久久久久婷婷 | 99免费在线视频 |