实战IT培训机构_黄色激情网站_IT培训班选大学生IT技术培训中心_黄色激情视频网站_中公优就业

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

【Python基礎(chǔ)知識】Python閉包函數(shù)

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

1、閉包函數(shù)的概念

閉包函數(shù)的語法格式如下:

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

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

    def 內(nèi)部函數(shù)名(內(nèi)參數(shù)):

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

  return 內(nèi)部函數(shù)名

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

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

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

  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次登錄 

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

2、閉包函數(shù)的案例

下面介紹一個閉包函數(shù)的案例。使用閉包函數(shù)實現(xiàn)Bob與Will聊天功能,打印聊天記錄以及談話人說的是第幾句話。為了實現(xiàn)上述功能,設(shè)計一下編程思路:首先創(chuàng)建一個閉包函數(shù)person(),然后調(diào)用兩次閉包函數(shù),實現(xiàn)打印目的。需要注意的是,記錄說話次數(shù)的變量需要使用關(guān)鍵字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!'

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

  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句話 

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

如果對Python開發(fā)感興趣或者想要深入學(xué)習(xí)的現(xiàn)在可以免費領(lǐng)取學(xué)習(xí)大禮包哦(點擊領(lǐng)取80G課程資料 備注:領(lǐng)資料)。

文章“【Python基礎(chǔ)知識】Python閉包函數(shù)”已幫助

>>本文地址:http://m.jecan.cn/zhuanye/2020/61385.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

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

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內(nèi)設(shè)計室內(nèi)設(shè)計
  • 平面設(shè)計平面設(shè)計
  • 電商設(shè)計電商設(shè)計
  • 網(wǎng)頁設(shè)計網(wǎng)頁設(shè)計
  • 全鏈路UI/UE設(shè)計UI設(shè)計
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發(fā)智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 氮化镓芯片-碳化硅二极管 - 华燊泰半导体 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 无线对讲-无线对讲系统解决方案-重庆畅博通信 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 西门子代理商_西门子变频器总代理-翰粤百科 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 广州物流公司_广州货运公司_广州回程车运输 - 万信物流 | 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 水篦子|雨篦子|镀锌格栅雨水篦子|不锈钢排水篦子|地下车库水箅子—安平县云航丝网制品厂 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 上海办公室设计_办公楼,写字楼装修_办公室装修公司-匠御设计 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 好杂志网-首页| 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 碳钢法兰厂家,非标法兰,定制异型,法兰生产厂家-河北九瑞管道 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 四川实木门_成都实木门 - 蓬溪聚成门业有限公司 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | TwistDx恒温扩增-RAA等温-Jackson抗体-默瑞(上海)生物科技有限公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 |