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实现批量下载文件
May 17 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
python变量的存储原理详解
Jul 10 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
记录模型训练时loss值的变化情况
Jun 16 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 Python
详解Python自动化之文件自动化处理
Jun 21 Python
Python socket如何解析HTTP请求内容
Feb 12 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
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
Django框架实现逆向解析url的方法
2018/07/04 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
实例代码讲解Python 线程池
2020/08/24 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
医学实习生自我鉴定
2013/12/12 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
个人工作表现评语
2014/04/30 职场文书
普通话宣传标语
2014/06/26 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
python井字棋游戏实现人机对战
2022/04/28 Python