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实例分享:快速查找出被挂马的文件
Jun 08 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
对python周期性定时器的示例详解
Feb 19 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
Python将列表中的元素转化为数字并排序的示例
Dec 25 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
python开发的自动化运维工具ansible详解
Aug 07 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的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
python实现爬取千万淘宝商品的方法
2015/06/30 Python
使用Python操作MySQL的一些基本方法
2015/08/16 Python
利用Python实现图书超期提醒
2016/08/02 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
Python装饰器用法实例总结
2018/05/26 Python
设置python3为默认python的方法
2018/10/31 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
python爬取音频下载的示例代码
2020/10/19 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
企业法人授权委托书
2014/09/25 职场文书
乐山大佛导游词
2015/02/02 职场文书
中秋节慰问信
2015/02/15 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
领导欢送会主持词
2015/07/06 职场文书
2016父亲节感恩话语
2015/12/09 职场文书