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中使用platform模块获取系统信息的用法教程
Jul 08 Python
Python线程下使用锁的技巧分享
Sep 13 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
python dlib人脸识别代码实例
Apr 04 Python
python使用minimax算法实现五子棋
Jul 29 Python
基于Python实现扑克牌面试题
Dec 11 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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文件下载类
2006/12/06 PHP
php 文件缓存函数
2011/10/08 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
Python实现二分查找算法实例
2015/05/26 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
python实现的汉诺塔算法示例
2019/10/23 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
使用python操作lmdb对数据读取的实例
2020/12/11 Python
python opencv实现图像配准与比较
2021/02/09 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
如何强制垃圾回收
2015/10/06 面试题
某个公司的Java笔面试题
2016/03/11 面试题
宿舍使用违章电器检讨书
2014/01/12 职场文书
银行优秀员工事迹
2014/02/06 职场文书
我的老师教学反思
2014/05/01 职场文书
电子信息工程自荐信
2014/05/26 职场文书
大学专科自荐信
2014/06/17 职场文书
安全教育培训制度
2015/08/06 职场文书