400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎知識】Python閉包函數

【Python基礎知識】Python閉包函數

  • 發布: python培訓
  • 來源:python干貨資料
  • 2020-11-25 10:53:07
  • 閱讀()
  • 分享
  • 手機端入口

1、閉包函數的概念

閉包函數的語法格式如下:

def 外部函數名(外參數):

  函數體(包含外局部變量)

    def 內部函數名(內參數):

      函數體(引用外局部變量或外參數)

  return 內部函數名

由此可知,閉包函數是函數嵌套中內函數可引用外函數的局部變量或參數的函數。在閉包函數中,外部函數的返回值是內部函數名。

假設有一個登錄界面,需要記錄登錄次數。要實現登錄功能,首先定義login()函數,這個函數有兩個參數,第一個參數是用戶名,第二個參數是密碼。接著對用戶名和密碼進行判斷,如果用戶名和密碼均正確,那么登錄成功,否則登錄失敗。在登錄功能的基礎上記錄登錄次數,則需要在login()函數中定義一個變量,用于記錄登錄次數,每次判斷成功后登錄次數加1。這樣做是得不到正確的登錄次數的,這是因為此時登錄次數是函數內的局部變量,隨著函數執行完畢后釋放內存,這樣沒有辦法一直使用這個局部變量。

要解決這個問題,可以使用閉包函數,代碼如下:

  1. >>> def login(name, pwd): 
  2. ...     i = 0 
  3. ...     def fun(): 
  4. ...         if name == 'admin' and pwd == '123456'
  5. ...             nonlocal i 
  6. ...             i += 1 
  7. ...             print('歡迎登錄,這是您第%d次登錄' % i) 
  8. ...         else
  9. ...             print('登錄失。'
  10. ...     return fun 
  11. ... 
  12. >>> f = login('admin''123456'
  13. >>> f() 
  14. 歡迎登錄,這是您第1次登錄 
  15. >>> f() 
  16. 歡迎登錄,這是您第2次登錄 

在外部函數login()中已經定義了變量i,而在內部函數fun()中需要修改變量i的值,則需要在內部函數fun()中使用關鍵字nolocal修飾變量i。

2、閉包函數的案例

下面介紹一個閉包函數的案例。使用閉包函數實現Bob與Will聊天功能,打印聊天記錄以及談話人說的是第幾句話。為了實現上述功能,設計一下編程思路:首先創建一個閉包函數person(),然后調用兩次閉包函數,實現打印目的。需要注意的是,記錄說話次數的變量需要使用關鍵字nonlocal修飾。代碼如下:

  1. def person(name): 
  2.     n = 0 
  3.     def do(something): 
  4.         nonlocal n 
  5.         n += 1 
  6.         print('{} say:{}  {}的第{}句話'.format(name, something, name, n)) 
  7.     return do 
  8. Bob = person('Bob'
  9. Will = person('Will'
  10. Bob('I am Bob!'
  11. Will('I am Will!'
  12. Bob('早上好,Will!'
  13. Will('早上好,Bob!'

建議將這個程序使用腳本模式運行,運行結果:

  1. Bob say:I am Bob!  Bob的第1句話 
  2. Will say:I am Will!  Will的第1句話 
  3. Bob say:早上好,Will!  Bob的第2句話 
  4. Will say:早上好,Bob!  Will的第2句話 

上述程序中,首先定義一個外部函數person(),參數為name,用于接收名字。然后定義一個內部函數do(),參數為something,用于接收聊天內容。內部函數do()結束后,外部函數person()的return返回值是內部函數名do。在do()函數中,使用format()方法打印輸出誰說了什么內容。在這個程序中,關鍵是要記錄這是談話人說的第幾句話,需要將變量n初始化設在外部函數中,并在內部函數中使用關鍵字nonlocal修飾變量n。實現了閉包函數后,定義2個閉包,分別傳入參數Bob和Will,并將返回值分別保存在變量Bob和Will中。由于外部函數的返回值是內部函數名do,因此,Bob('I am Bob!')等價于調用內部函數do('I am Bob!')。do()函數中,變量n先增加1,記錄是第幾句話,然后是一個打印語句,使用format()方法格式化打印字符串。下面3行代碼的功能也與這行代碼相同。

如果對Python開發感興趣或者想要深入學習的現在可以免費領取學習大禮包哦(點擊領取80G課程資料 備注:領資料)。

文章“【Python基礎知識】Python閉包函數”已幫助

>>本文地址:http://www.028benet.com/zhuanye/2020/61385.html

THE END  

聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。

1 您的年齡

2 您的學歷

3 您更想做哪個方向的工作?

獲取測試結果
  • 大前端大前端
  • 大數據大數據
  • 互聯網營銷互聯網營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯網嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內設計室內設計
  • 平面設計平面設計
  • 電商設計電商設計
  • 網頁設計網頁設計
  • 全鏈路UI/UE設計UI設計
  • VR/AR游戲開發VR/AR
  • 網絡安全網絡安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 国产精品天干天干综合网| 免费a级毛片高清在钱| 日本欧美大码aⅴ在线播放| 国产成人精品啪免费视频| 亚洲欧美四级在线播放| 在线国产你懂的| 毛片免费视频观看| 97精品视频在线观看| 亚洲成a人片在线观看久| 国产网站在线看| 桃子视频在线观看高清免费视频 | 国产又大又黑又粗免费视频| 日本亚洲欧美在线视观看| 色多多在线观看| 中文字幕av高清片| 全免费a级毛片免费看| 女人张腿让男人捅| 欧美黑人巨大videos精| 日本xxxxx高清视频| 久久久久久久99视频| 免费看黄色三级毛片| 国产精品自产拍在线观看花钱看| 欧美aaaaaaaaaa| 老司机67194精品线观看| gogo人体销魂baoyu231| 亚洲妇女水蜜桃av网网站| 国产成人精品免费视频大全五级 | 婷婷开心中文字幕| 欧美激情一区二区三区成人| 黄网免费在线观看| 丁香花免费高清视频完整版 | 香蕉一区二区三区观| qvod激情视频在线观看| 亚洲人成777在线播放| 四虎永久在线精品视频| 国产精品热久久无码AV| 手机在线观看精品国产片| 欧美日韩精彩视频| 精品真实国产乱文在线| 亚洲校园春色另类激情| www.youjizz.com国产|