python中的闭包

发布时间:2019-08-12 11:50:48编辑:auto阅读(1664)

    • 闭包

    绑定外部变量的函数

    返回一个绑定外部变量的内部函数

    1. 嵌套函数

    2. 内部函数用到了外部变量

    3. 外部函数返回内部函数


    def pow_x(x):
        def echo(value):
            x=2
            return value ** x
        return echo
    
    if __name__=='__main__':
        lst = (pow_x(2), pow_x(3), pow_x(4))
        for p in lst:
            print p(2)
    1. 内部变量不能"改变"外部变量

    2. 内部函数用到了外部变量为list,则可以从外部或内部改变值,并且即使外部没有引用也不会回收

      例子


    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    __author__ = 'teng'
    def pow_y(x):
        def echo(value):
            x[0] = x[0]*2 # 可以改变值 访问了该值 而不是给予
            # x=[2,2]
            return value ** x[0], value**x[1]
        return echo
    
    
    if __name__ == '__main__':
        lst2 = pow_y([1, 1])
        print "closure powy", lst2(2)
        print "closure powy", lst2(3)
        print "closure powy", lst2(4)

    一个关于闭包的应用 

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    __author__ = 'teng'
    
    origin = [0, 0]
    legal_x = [0, 50]
    legal_y = [0, 50]
    
    def create(pos):
        def player(direction, step):
            new_x = pos[0]+direction[0]*step
            new_y = pos[1]+direction[1]*step
            pos[0] = new_x
            pos[1] = new_y
            return pos
        return player
    
    player1 = create(origin[:])
    print player1([1, 0], 10)
    print player1([0, 1], 20)
    print player1([-1, 0], 10)
    print "orgin is", origin
    
    print "origin is",origin
    
    player2 = create(origin[:])
    print player2([-1,0],10)
    print player2([1,1],20)
    print player2([1,0],10)


关键字

上一篇: python按月分表

下一篇: python 实现socket