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 相关文章推荐
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Python连接phoenix的方法示例
Sep 29 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
Python制作数据预测集成工具(值得收藏)
Aug 21 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 面向对象的一个例子
2011/04/12 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
js中更短的 Array 类型转换
2011/10/30 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
JQuery判断正整数整理小结
2017/08/21 jQuery
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Python3并发写文件与Python对比
2019/11/20 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
委托书怎么写
2014/07/31 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
联村联户简报
2015/07/21 职场文书
团结主题班会
2015/08/13 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang