云图网
  • 业界资讯
  • 技术专区
    • 云计算
    • 人工智能
    • 信息安全
    • 大数据
    • 架构设计
    • 研发管理
    • 物联网
    • 数据库
    • 区块链
    • 大前端
    • 开源
    • 移动开发
    • Java
    • linux专区
    • PHP
    • python
    • 智能运维
    • 编程笔记
    • 编程教程
    • WordPress
  • AIGC
  • 企业战略规划
  • 下载专区
  • 江湖史
  • 随笔记录
登录 注册
投稿
  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

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

相关推荐

  • 掰一掰GitHub上优秀的大数据项目 2021年8月9日
  • 博客园自定义页面风格设计详解编程语言 2021年7月19日
  • Web Scraping Using Python 2022年5月30日
  • Python Tuple 2022年5月30日
  • 关于python:将二进制数据解析为ASCII字符串 2022年6月19日
  • 在 Linux 上安装 FFmpeg 2022年7月3日
  • rabbitmq的简单介绍一详解编程语言 2021年7月19日
  • The first assignment 2022年9月14日
  • 《代码英雄》第三季(1):Python 的故事 2021年8月7日
  • 被社区关注的 Blink 开源到底向上游贡献了什么? 2021年8月6日

发表回复

请登录后评论...
登录后才能评论
  • 欢迎投稿
  • 隐私政策
  • 使用协议
  • 服务条款
  • 版权声明

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

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