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练习程序批量修改文件名
Jan 16 Python
python socket 超时设置 errno 10054
Jul 01 Python
python统计cpu利用率的方法
Jun 02 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
python批量替换页眉页脚实例代码
Jan 22 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
django 多数据库配置教程
May 30 Python
Python IDLE清空窗口的实例
Jun 25 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 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注释和去除空格函数分享
2014/03/13 PHP
常用PHP封装分页工具类
2017/01/14 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
JavaScript修改css样式style
2008/04/15 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
python之django母板页面的使用
2018/07/03 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
大学生个人简历自我评价
2013/11/16 职场文书
学校安全检查制度
2014/01/27 职场文书
小学语文教研活动总结
2014/07/01 职场文书
机械操作工岗位职责
2014/08/08 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
二手房购房协议书范本
2014/10/05 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js