python 闭包

闭包(closure)是函数式编程的重要的语法结构,函数式编程是一种编程范式(而面向过程编程和面向对象编程也都是编程范式)

在面向过程编程中,我们见到过函数(function)

不同的语法实现闭包的方式不同,python以函数对象为基础,为闭包语法结构提供支持的


def line_conf(a, b):
    def line(x):
        return a*x + b

    return line
a=line_conf(3,4)
print a
print type(a)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a6.py
<function line at 0x021E0A70>
<type 'function'>

Process finished with exit code 0


def line_conf(a, b):
    def line(x):
        return a*x + b

    return line
a=line_conf(3,4)
print a
print type(a)

print a(6)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a6.py
<function line at 0x021A0A70>
<type 'function'>
22

由于python的静态嵌套域,如我们早先看到的,定义内部函数变得很有用处。在下面的部分中,

我们将着重讨论作用域和lambda,但是在python2.1之前,当作用域规则变为今天这样之前,内部函数也会遭受相同的问题。


简单的闭包例子:

下面是使用闭包简单的例子,我们会模拟一个计数器,同样也通过将整数包裹位一个列表的单一元素来模拟使整数

def counter(start_at=0):
    x=start_at
    def incr():
        y=x+9
        return y
    return incr
count=counter(5)
print count()

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a7.py
14

counter()做的唯一一件事就是接受一个初始化的值来开始计数,并将该值赋给列表count唯一一个成员。

然后定义一个incr()的内部函数。

通过在内部使用变量count,我们创建了一个闭包因为它现在携带了整个counter()作用域。

然后最后的魔法就是counter()返回一个inct,一个可调用的函数对象。


原文地址:https://www.cnblogs.com/hzcya1995/p/13349226.html