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 相关文章推荐
django站点管理详解
Dec 12 Python
用tensorflow实现弹性网络回归算法
Jan 09 Python
pyqt5自定义信号实例解析
Jan 31 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
使用Python实现一个栈判断括号是否平衡
Aug 23 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
python django中8000端口被占用的解决
Dec 17 Python
基于Pytorch SSD模型分析
Feb 18 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
python从PDF中提取数据的示例
Oct 30 Python
如何使用pdb进行Python调试
Jun 30 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
php生成文件
2007/01/15 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
如何在PHP中读写文件
2020/09/07 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
html5画布旋转效果示例
2014/01/27 HTML / CSS
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
SQL数据库笔试题
2016/03/08 面试题
卫校毕业生个人自我鉴定
2014/04/28 职场文书
高中班主任寄语
2019/06/21 职场文书