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 相关文章推荐
对pandas进行数据预处理的实例讲解
Apr 20 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
python异步存储数据详解
Mar 19 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
python map比for循环快在哪
Sep 21 Python
pandas实现导出数据的四种方式
Dec 13 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在线生成二维码代码(google api)
2013/06/03 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python 实现随机数详解及实例代码
2017/04/15 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
python中altair可视化库实例用法
2021/01/26 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
internal修饰符起什么作用
2013/12/16 面试题
函授毕业个人自我评价
2014/02/20 职场文书
应届生自荐书
2014/06/23 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
2014年创卫工作总结
2014/11/24 职场文书
实习证明模板
2015/06/16 职场文书
中学团支部工作总结
2015/08/13 职场文书