Python闭包之返回函数的函数用法示例


Posted in Python onJanuary 27, 2018

闭包(closure)不是什么可怕的东西。如果用对了地方,它们其实可以很强大。闭包就是由其他函数动态生成并返回的函数,通俗地讲,在一个函数的内部,还有一个“内层”的函数,这个“内层”的函数是被返回的,它可以访问其创建者的局部命名空间中的变量。

下面是一个非常简单的例子:

# 定义一个函数
def make_closure(a):
  # 在函数内部再定义一个函数,其实这个里面的函数就被认为是闭包
   def closure():
     # 这里打印一下传递进来的数字是什么
     print('I know the secret : %d' % a)
   return closure

# 给make_closure函数赋值,这个7就是给参数a
closure1 = make_closure(7)
# 这个其实就是调用返回的closure函数,然后执行closure函数
closure1()

运行结果:

Python闭包之返回函数的函数用法示例

我的理解:其实闭包就是一个函数A里还有另一个函数B,因为返回值是函数B,所以在调用函数A的时候,如果想让函数B也执行,必须还要再调用一次函数B。

对于一个函数内嵌了N个函数,那么就需要初始化N次。

你可能会想,这到底有什么用。在实际工作中,你可以编写带有大量选项的非常一般化的函数,然后再组装出更简单更专门化的函数。

下面这个例子中创建了一个字符串格式化函数:

def format_and_pad(template, space):
  def formatter(x):
    return (template % x).rjust(space)

  return formatter
# 创建一个始终返回15位字符串的浮点数格式化器
fmt = format_and_pad('%.4f',15)
fmt(1.756)

运行结果:

Python闭包之返回函数的函数用法示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过zlib实现压缩与解压字符串的方法
Nov 19 Python
python中Genarator函数用法分析
Apr 08 Python
Python fileinput模块使用实例
May 28 Python
python数组过滤实现方法
Jul 27 Python
利用python发送和接收邮件
Sep 27 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Django中的文件的上传的几种方式
Jul 23 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
python树莓派红外反射传感器
Jan 21 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
详解如何利用Cython为Python代码加速
Jan 27 #Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 #Python
Python实现的栈(Stack)
Jan 26 #Python
使用python实现链表操作
Jan 26 #Python
Python中optparser库用法实例详解
Jan 26 #Python
python利用socketserver实现并发套接字功能
Jan 26 #Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 #Python
You might like
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
详谈javascript异步编程
2016/02/21 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
python3.7添加dlib模块的方法
2020/07/01 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
任课老师推荐信范文
2013/11/24 职场文书
成龙洗发水广告词
2014/03/14 职场文书
法院信息化建设方案
2014/05/21 职场文书
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js