Python闭包

#Python闭包(closure)
#闭包的理解: 闭包能够将一个方法作为一个变量去传递
#   可以让局部变量的值始终保持在内存中
#   python中的闭包通过函数嵌套, 返回函数对象来实现(和js类似)
#   缺点: 过度使用闭包会导致性能下降
#   优点: 代码展示更优雅, 更符合逻辑, 

def counter(a=0):
    count = [a] #这里不能使用int, 否则无法自增
    def add_one():
        count[0] += 1
        return count[0]
    return add_one

c1 = counter(5) #返回的c1是函数对象, 调用的时候需要带上括号
print(c1()) #6
print(c1()) #7
#这里的counter函数之所以不用全局变量, 是因为在复杂程序中, 全局变量会有很多麻烦
#命名冲突, 垃圾回收

# a * x + b = y 计算y
def a_line(a, b):
    def arg_y(x):   #这里可以使用lambda来改写 return lambda x: a*x + b
        return a * x + b
    return arg_y

line1 = a_line(3, 5)
print(line1(10))
line2 = a_line(4, 7)
print(line2(10))
#这里的python闭包函数和java匿名内部类相比, 优势是可以在定义函数时, 可以传递可变参数

你可能感兴趣的:(Python闭包)