python中的闭包

原创 2012年03月27日 15:22:55

举个例子:

def make_adder(addend):
    def adder(augend):
        return augend + addend
    return adder


make_adder函数里嵌套了一个内层函数adder,这个内层函数就是一个闭包,其实可以也不用管这个“闭包”的概念,先来看下这种模式解决些什么问题,“闭包”只是个名称罢了。

调用make_adder函数:p = make_adder(23),由于内层的函数adder里的逻辑用到了make_adder函数的入参,而这时这个入参addend绑定了值23,由于make_adder函数返回的是函数adder,所以这时的p其实就是内部的addend绑定了23的函数adder;同理可知,q = make_adder(44),这里的q就是内部addend绑定了44的函数adder,p和q这两个adder函数是不相同的,因为内部addend绑定的值不同,只是两个函数的模板相同罢了,这时我们执行p(100)得到结果是123,q(100)得到结果是144。这样做有什么用呢?其实可以这样看:我们可以把p = make_adder(23)和q = make_adder(44)看成是配置过程,23和44是配置信息,p(100)和q(100)根据不同的配置获得不同的结果,这样我们就可以解决开发中“根据配置信息不同获得不同结果”的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python之嵌套函数与闭包

原文链接:http://yunjianfei.iteye.com/blog/2186092 嵌套函数 python是允许创建嵌套函数的,也就是说我们可以在函数内部定义一个函数,这些...

Python学习笔记——闭包

预习在学习闭包之前,我们先要弄懂一件事儿。同理:Test其实就是一个变量,变量中存放着函数体的地址,就像a变量中存放着100的地址一样。t = Test实质上就是浅拷贝行为。将变量Test中的地址存放...

Python装饰器(闭包)

(一)函数作用域LEGB LEGB:L>E>G>B L: local函数内部作用域 E:enclosing函数内部与内嵌函数之间 G:global全局作用域 B:build-in 内置作用域...

Python 语言及其应用 Chapter_4_Note_3 闭包_匿名函数lambda_生成器

我们又来到了闭包,上次看其他教程就是从闭包开始崩溃的,感觉这本教材还算通俗些,先做点笔记吧。 讲闭包前,先讲一下关于内部函数 内部函数 在Python 中,可以在函数中定义另外一个函数:...

Python中闭包的理解

Python中闭包的理解: 官方定义: 闭包是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数,这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外...

Python 之 闭包

闭包这个概念在很多语言中都有涉及,本文主要谈谈Python中的闭包。Python中使用闭包主要是在进行函数式开发时使用。 一,定义 python中的闭包从表现形式上定义(解释)为:如果在一个内...

Python学习笔记(12) -- (关键词:返回函数/闭包)

原文链接: http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143183523...

python源码阅读-闭包实现

一、缘由       听了朋友吹Lua的闭包实现,感觉Lua的闭包实现很优雅,之前也在网上看到一些关于python闭包的源码分析,但是好像很复杂的样子没有细细深究。所以现在好好分析一下。 二、开始...

python-闭包概念和append()和extend()的不同

首先看一段代码:def count(): fs = [] for i in range(1, 4): def f(j): def g(): ...

python中的闭包

常规的闭包:def make_adder(addend): def adder(augend): return augend + addend return adder...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)