课程
/后端开发
/Python
/python进阶
这样调用f(i)时 i不也是=3吗
2020-02-27
源自:python进阶 2-9
正在回答
个人理解:闭包是在外层函数结束时形成的,会在此时记录闭包中的变量,参数等。f和g相当于一个闭包,所以会在return g时形成闭包保存不同的三个i值。如果没有多一层函数的话,闭包是在return fs的时候形成的,三个返回函数使用的i值都是3。
有可能是因为套两层的时候 其实是在for循环之后在执行f函数,而三层则是在for循环中就执行了f函数,前者因为for循环结束i最后的结果是i=3所以结果是3*3,而在for循环中执行了f函数,则会根据每次执行时的i值变化结果
def count():
fs = []
for i in range(1, 4):
def f(x):
def g():
return x * x
return g
fs.append(f(i))
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
调用 `f` 时,`i` 是外部传入的变量,第4行的 `i` 和第8行的 `i` 不是一层意思
相当于如下代码,就好解释了:
def count(): fs = [] for i in range(1, 4): def f(x): def g(): return x * x return g fs.append(f(i)) return fsf1, f2, f3 = count()print f1(), f2(), f3()
慕妹0070723 提问者
慕前端7352391 回复 慕妹0070723 提问者
举报
学习函数式、模块和面向对象编程,掌握Python高级程序设计