# -*- coding:UTF-8 -*-
def lazyFun(x):
def fun():
return x*x
return fun
ff=lazyFun(3)
print ff
# 下面函数不需要参数
print ff()
print lazyFun(3)==lazyFun(3)
# 打印如下
# <function fun at 0x109c6c320>
# 9
# False
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
print f1()
print f2()
print f3()
#
# 打印如下
# 9
# 9
# 9
#
# 返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为9。
#
# 返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
# 改成下面这样就可以了
def getcount():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
fs.append(f(i))
return fs
f1, f2, f3 = getcount()
print f1()
print f2()
print f3()
# 打印如下
# 1
# 4
# 9