user-0 提问: 闭包的意义是什么？

回复:
user: user-1
content: 可以简单认为闭包是可以保存局部变量的函数，然后该函数可以在后面调用。  def count():     fs = [] # 列表开始为空     for i in range(1, 4):          def f(): # 定义函数（闭包），但是并没有调用它             print 'python'                                                                                                              return i*i # 这里闭包可以访问局部变量i         fs.append(f) # 将函数（闭包）加入列表，但是还是没有调用它     return fs # 返回列表   f1, f2, f3 = count() # 将返回的列表中的元素（闭包）分别赋给f1, f2, f3 print f1() # 调用闭包，所以只是调用了一次而已

user: user-0
content: up 起来，然更多的人看到，帮忙解答。

user: user-0
content: 继续接8楼：  def count():     fs = [] # 列表开始为空     i = 2      def f(): # 定义函数（闭包），但是并没有调用它         print 'python'         return i*i # 这里闭包可以访问局部变量i     fs.append(f) # 将函数（闭包）加入列表，但是还是没有调用它     print fs     return fs # 返回列表                                                                                                     f1 = count() # 将返回的列表中的元素（闭包）分别赋给f1, f2, f3 print f1() # 调用闭包，所以只是调用了一次而已  去掉for 循环。 运行结果：   TypeError: 'list' object is not callable  何故 ?

user: user-0
content: 接7楼，最后一个实验：  ef count():     fs = [] # 列表开始为空     for i in range(1, 5):          def f(): # 定义函数（闭包），但是并没有调用它             print 'python'             return i*i # 这里闭包可以访问局部变量i         fs.append(f) # 将函数（闭包）加入列表，但是还是没有调用它         print fs                                                                                                                return fs # 返回列表         f1,f2, f3, f4 = count() # 将返回的列表中的元素（闭包）分别赋给f1, f2, f3  运行结果是：    [<function f at 0x7fae472021b8>] [<function f at 0x7fae472021b8>, <function f at 0x7fae47202320>] [<function f at 0x7fae472021b8>, <function f at 0x7fae47202320>, <function f at 0x7fae47202398>] [<function f at 0x7fae472021b8>, <function f at 0x7fae47202320>, <function f at 0x7fae47202398>, <function f at 0x7fae47202410>] python 16  说明fs 中存储了4个函数，  可是为什么这4个函数的调用结果是一样的 ？？   确实让人费解

user: user-0
content: 引用 6 楼 ForestDB 的回复:可以简单认为闭包是可以保存局部变量的函数，然后该函数可以在后面调用。  def count():     fs = [] # 列表开始为空     for i in range(1, 4):          def f(): # 定义函数（闭包），但是并没有调用它             print 'python'                                                                                                              return i*i # 这里闭包可以访问局部变量i         fs.append(f) # 将函数（闭包）加入列表，但是还是没有调用它     return fs # 返回列表   f1, f2, f3 = count() # 将返回的列表中的元素（闭包）分别赋给f1, f2, f3 print f1() # 调用闭包，所以只是调用了一次而已   多谢前辈指点，  为了验证你的说法，我做了一个改进：  def count():     fs = [] # 列表开始为空     for i in range(1, 5):                                                                                                           def f(): # 定义函数（闭包），但是并没有调用它             print 'python'             return i*i # 这里闭包可以访问局部变量i         fs.append(f) # 将函数（闭包）加入列表，但是还是没有调用它     return fs # 返回列表  f1,f2, f3, f4 = count() # 将返回的列表中的元素（闭包）分别赋给f1, f2, f3 print f1() # 调用闭包，所以只是调用了一次而已  注意： f1,  f2 ,f3, f4   range(1, 5)，   再做一个实验：  >>> fs =[1, 2, 3, 4] >>> a, b, c, d = fs >>> print a 1 >>> print b 2 >>> print 3 3 >>> print c 3 >>> print d 4   这2个实验可以得出结论： python 的赋值技法 太复杂了，原来这样子赋值！！！！

user: user-0
content: 引用 3 楼 akirya 的回复:不太懂python， f只保存了i 没有保存 fs  大神不懂python啊

user: user-2
content: 不太懂python， f只保存了i 没有保存 fs

user: user-2
content: 引用 1 楼 user-3 的回复:这个是lua吗 python

user: user-3
content: 这个是lua吗