#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匿名内部类相比, 优势是可以在定义函数时, 可以传递可变参数