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中optparse模块使用浅析
Jan 01 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
一看就懂得Python的math模块
Oct 21 Python
使用python爬取微博数据打造一颗“心”
Jun 28 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
在Django的View中使用asyncio的方法
Jul 12 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
keras获得某一层或者某层权重的输出实例
Jan 24 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
python获取淘宝服务器时间的代码示例
Apr 22 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中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
使用Apache的rewrite
2021/03/09 Servers
静态的动态续篇之来点XML
2006/08/15 Javascript
js可突破windows弹退效果代码
2008/08/09 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
实习销售业务员自我鉴定
2013/09/21 职场文书
水果超市创业计划书
2014/01/27 职场文书
高中毕业自我评价
2014/02/08 职场文书
夜不归宿检讨书
2014/02/25 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
化工操作工岗位职责
2014/04/29 职场文书
企业安全标语
2014/06/07 职场文书