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 04 Python
详细解析Python中的变量的数据类型
May 13 Python
python自动zip压缩目录的方法
Jun 28 Python
python使用itchat实现手机控制电脑
Feb 22 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
如何在django中添加日志功能
Feb 06 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 Python
Python的Tqdm模块实现进度条配置
Feb 24 Python
Python爬取网站图片并保存的实现示例
Feb 26 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制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
php5与php7的区别点总结
2019/10/11 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
jQuery操作input值的各种方法总结
2013/11/21 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
Django小白教程之Django用户注册与登录
2016/04/22 Python
python中os模块详解
2016/10/14 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
numpy基础教程之np.linalg
2019/02/12 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
如何基于python操作excel并获取内容
2019/12/24 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
Tostadora意大利:定制T恤
2019/04/08 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
中专生自我鉴定
2013/12/17 职场文书
协议书与合同的区别
2014/04/18 职场文书
质量月口号
2014/06/20 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
学校运动会感想
2015/08/10 职场文书
教师读书活动心得体会
2016/01/14 职场文书