函数闭包有点不懂啊,大神帮我看看
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(),f2(),f3())
为什么i就会被调用成3呢,为啥不会顺着下去i*i这样,能不能给个清晰点的解释
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(),f2(),f3())
为什么i就会被调用成3呢,为啥不会顺着下去i*i这样,能不能给个清晰点的解释
2018-10-23
for循环在执行的时候,i的值分别为1 2 3,但是函数f并没有被调用过,
所以函数f中的return i * i语句并没有改变过,它只是return i * i
而不是return 1 * 1 或 return 2 * 2 或 return 3 * 3
在执行到fs.append(f)语句时,也只是把函数f添加到fs中3次,
添加时函数f中的内容仍然是return i * i
而不是return 1 * 1 或 return 2 * 2 或 return 3 * 3
只有当函数f被调用时,才会去获取i的值,这个时候for循环早已结束,i的值也已经是3了
>>> f1, f2, f3 = count() # 变量f1,f2,f3分别指向fs中的3个f函数 >>> f1 <function f at 0x7fef19c93c08> >>> f2 <function f at 0x7fef19c93c80> >>> f3 <function f at 0x7fef19c93cf8> >>> print f1(),f2(),f3() # 分别调用3个f函数 9 9 9
举报