云图网
  • 业界资讯
  • 技术专区
    • 云计算
    • 人工智能
    • 信息安全
    • 大数据
    • 研发管理
    • 大前端
    • 开源
    • 智能运维
    • 编程笔记
    • WordPress
  • 企业战略规划
  • 下载专区
  • 江湖史
  • 随笔记录
登录 注册
投稿
  1. 云图网首页
  2. 技术专区
  3. 编程笔记

2022.04.14-python学习之函数的闭包

2022年4月17日 02:15 • 编程笔记


 1 # File : learning_011_closures.py
 2 # Datetime : 2022/4/14 1:22
 3 
 4 
 5 # 闭包
 6 # 一般情况下,如果一个函数结束,函数的内部所有东西都会释放掉,局部变量都会消失。
 7 # 但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
 8 
 9 # 1. 函数的闭包
10 # 在python中,一个函数内部再定义一个其他函数,将外部函数作为其嵌套内部函数的引用环境,
11 # 并且在内部函数处理期间外部函数的引用环境一致都会保持不变,
12 # 这种将内部函数与外部函数作为整体处理的函数嵌套结构在程序设计中称为闭包.
13 # 代码示例:
14 def outer(a):  # 定义外部函数
15     print("a = %d" % a)
16 
17     def inner(b):  # 定义内部函数
18         print("b = %d" % b)
19         return a + b  # a为外部函数的参数,与内部函数的参数b相加
20 
21     return inner  # 返回内部函数对象
22 
23 
24 result = outer(10)  # 接收外部函数对象
25 print(result(11))  # result(11)执行内部函数inner()
26 
27 
28 # 在outer函数内部嵌套了inner函数,inner函数可以使用外部函数outer中传入的参数,
29 # 在获取内部函数时,首先通过外部函数返回了内部函数的引用给对象result,
30 # 这样result就代表了inner内部函数,当result()执行函数时会继续使用外部函数outer中的变量a执行加法计算
31 
32 # 总结:
33 # 在一个外部函数中定义了一个内部函数,
34 # 内部函数里运用了外部函数的临时变量,
35 # 并且外部函数的返回值是内部函数的引用。这样就构成了一个闭包。
36 
37 
38 # 闭包的最大特点:
39 # 是可保持外部函数操作的状态,
40 # 但是  如果要想在 内部函数中 修改 外部函数中定义的局部变量或者参数的内容,则必须使用nonlocal关键字
41 
42 # 代码示例:
43 
44 def print_count(login_count):  # 外部函数
45     def login(login_name):  # 内部函数
46         nonlocal login_count  # 修改外部函数变量  使用nonlocal函数
47         login_count += 1  # 修改外部函数变量
48         return "第 %d 次登录信息: %s" % (login_count, login_name)
49 
50     return login  # 返回内部函数对象
51 
52 
53 login_info = print_count(0)  # 接收外部函数对象,从0开始计数
54 print(login_info("张三"))  # 调用内部函数
55 print(login_info("李四"))
56 print(login_info("王五"))

 

原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/244428.html

loginprint内部函数外部闭包
赞 (0)
0 0
生成海报
2022.04.14-python学习之装饰器
上一篇 2022年4月17日 02:15
用c语言编程读取80*25分辨率的BMP图片中的文字图像以字符点阵的形式显示
下一篇 2022年4月17日 02:15

相关推荐

  • gem5 使用记录, 基于理解来写个最简单的计数器程序 2022年9月8日
  • Python3 dict和str互转 2022年8月22日
  • 1 分钟在 Serverless 上部署现代化 Deno Web 应用 2022年8月15日
  • python-小练习(9) 2022年4月16日
  • shell提取当前机器静态属性 2022年8月4日
  • Linux-man命令 2022年6月26日
  • Python 中的日期时间 2022年9月12日
  • 硬核剖析Java锁底层AQS源码,深入理解底层架构设计 2022年11月11日
  • MySQL基础 开窗函数 2022年4月18日
  • sql-分组查询和分页查询 2022年7月25日

发表回复

请登录后评论...
登录后才能评论

热门标签

AI (11871) aliyun (95062) Android (10391) c (14593) go (7786) google (20654) html (8304) https (10802) iPhone (21436) jd (7444) linux (18686) MD (8346) microsoft (7561) Phone (21786) python (7226) windows (18482) 人工智能 (9889) 安全 (28526) 开源 (16950) 微软 (13275) 手机 (21138) 游戏 (13254) 百度 (7189) 硬件 (14378) 美国 (20456) 苹果 (10017) 观察 (7533) 谷歌 (8726) 车 (28069) 通信 (7496)
  • 欢迎投稿
  • 隐私政策
  • 使用协议
  • 服务条款
  • 版权声明

Copyright © 2006-2025 YTSO.COM 版权所有 鲁ICP备15002310号-3 Powered by WordPress

免责声明:本站信息来自互联网收集分享,版权归原创者所有,如果侵犯了您的权益,请发邮件给39941211@qq.com通知我们删除.