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读取注册表中值的方法
Apr 08 Python
Python中的二叉树查找算法模块使用指南
Jul 04 Python
python简单猜数游戏实例
Jul 09 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
python绘制立方体的方法
Jul 02 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
django Serializer序列化使用方法详解
Oct 16 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
Python实现代码块儿折叠
Apr 15 Python
python如何实现DES加密
Sep 21 Python
python元组拆包实现方法
Feb 28 Python
什么是Python装饰器?如何定义和使用?
Apr 11 #Python
Python经常使用的一些内置函数
python处理json数据文件
Python几种酷炫的进度条的方式
Python通过loop.run_in_executor执行同步代码 同步变为异步
Python Pandas解析读写 CSV 文件
宝塔更新Python及Flask项目的部署
You might like
PHP 存储文本换行实现方法
2010/01/05 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
Django url 路由匹配过程详解
2021/01/22 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
工程师自我评价怎么写
2013/09/19 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
爱心捐款倡议书
2014/04/14 职场文书
2016情人节宣传语
2015/07/14 职场文书
九年级语文教学反思
2016/03/03 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Python基础之元编程知识总结
2021/05/23 Python