'''
闭包函数必须返回一个函数对象
闭包函数返回的那个函数必须引用外部变量(一般不能是全局变量),而返回的那个函数内部不一定要return
闭包比普通的函数多了一个 closure 属性,该属性记录着自由变量的地址。
当闭包被调用时,系统就会根据该地址找到对应的自由变量,完成整体的函数调用
__closure__属性返回的是一个元组对象,包含了闭包引用的外部变量。
若主函数内的闭包不引用外部变量,就不存在闭包,主函数的_closure__属性永远为None。
若主函数没有return子函数,就不存在闭包,主函数不存在_closure__属性
而且函数的__closure__属性是只读的,不能由人为修改
'''
_list = []
for i in range(3):
def func(i):
def f_closure(a):
return i + a
return f_closure
_list.append(func(i))
for f in _list:
print(f(1))