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使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
浅谈Python的文件类型
May 30 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
python里 super类的工作原理详解
Jun 19 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
python 生成器和迭代器的原理解析
Oct 12 Python
python神经网络编程实现手写数字识别
May 27 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
简单了解如何封装自己的Python包
Jul 08 Python
Python调用jar包方法实现过程解析
Aug 11 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设计模式之装饰器模式实例详解
2018/02/07 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Python下进行UDP网络编程的教程
2015/04/29 Python
利用Python如何生成随机密码
2016/04/20 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
opencv python如何实现图像二值化
2020/02/03 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
大学学习计划书范文
2014/05/02 职场文书
大型公益活动策划方案
2014/08/20 职场文书
承诺书样本
2014/08/30 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
长城导游词
2015/01/30 职场文书
PHP遍历数组的6种方式总结
2021/11/17 PHP
MySQL GTID复制的具体使用
2022/05/20 MySQL