Python闭包的定义和使用方法


Posted in Python onApril 11, 2022

1.闭包的定义和使用

当返回的内部函数使用了外部函数的变量就形成了闭包
闭包可以对外部函数的变量进行保存,还可以提高代码的可重用性

实现闭包的标准格式:

  • 1.函数嵌套
  • 2.内部函数使用外部函数的变量或参数
  • 3.外部函数返回了内部函数
'''
当返回的内部函数使用了外部函数的变量就形成了闭包
闭包可以对外部函数的变量进行保存,还可以提高代码的可重用性
实现闭包的标准格式:
    1.函数嵌套
    2.内部函数使用外部函数的变量或参数
    3.外部函数返回了内部函数
'''
 
# 定义一个闭包
def outer():    # 外部函数
    n=1
    def inner():    # 内部函数
        print(n)
    # 外函数返回内函数的引用(不用带括号哈)
    return inner
 
outer() # 调用外函数不会执行内函数
# inner() # 不能直接调用内函数
ret=outer() # 把内函数的引用给ret
print(ret)
ret()
 
# 闭包的使用
def person(name):
    def say(msg):
        print(f'{name} say:  {msg}')
    return say
 
tom=person('Tom')
rose=person('Rose')
tom('Hello')
rose('World')

2.闭包内函数修改外函数定义的变量(加nonlocal)

def outer():
    n=1
    def inner():
        nonlocal n  # 不加会报错,列表、字典、元祖不用加
        n=n+10
        print(n)
    print(n)    # 输出1
    return inner
 
fun=outer()
fun()   # 输出11
fun()   # 输出21

到此这篇关于Python闭包的使用方法的文章就介绍到这了,更多相关Python闭包 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python基于queue和threading实现多线程下载实例
Oct 08 Python
在Python中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
粗略分析Python中的内存泄漏
Apr 23 Python
详解Python中的文件操作
Aug 28 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
Python3 log10()函数简单用法
Feb 19 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
python文件编写好后如何实践
Jul 07 Python
python如何爬取网页中的文字
Jul 28 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
什么是Python装饰器?如何定义和使用?
Apr 11 #Python
Python经常使用的一些内置函数
python处理json数据文件
Python几种酷炫的进度条的方式
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
宝塔更新Python及Flask项目的部署
You might like
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
php date与gmdate的获取日期的区别
2010/02/08 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
在python中实现对list求和及求积
2018/11/14 Python
python实现Flappy Bird源码
2018/12/24 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
调解员先进事迹材料
2014/02/07 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
公诉意见书范文
2015/06/05 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
JavaScript ES6的函数拓展
2022/01/18 Javascript
Golang并发工具Singleflight
2022/05/06 Golang