求解
Topic source同意---泽鑫
的说法
注意廖老师两次代码的写法:
不带参数的闭包函数f()
def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) #注意到这里f是作为一个函数加入的 return fs f1, f2, f3 = count()
如注释说明,此时
fs.append(f)
每次加进去的是一个函数。带参数的f(i)
def count(): def f(j): def g(): return j*j return g fs = [] for i in range(1, 4): fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f() return fs
我的理解:此处,
fs.append(f(i))
传入的f(i)
会首先被进行函数计算,然后f(i)
的返回值,也就是函数g
作为fs.append()
的参数传入,所以最终传入的参数是函数g
,仍是一个函数。答主的写法
def count(): def f(j): return j*j fs = [] for i in range(1, 4): fs.append(f(i)) #按照2的分析,此处传入的参数完全是一个数字 return fs f1,f2,f3=count() print(f1) print(f2) print(f3)
如注释所分析的,按照2的分析进行展开,最终
fs.append()
接收到的参数是f(i)
的返回值,也就是一个数字。所以答主下面的输出直接是print(f1)
而不是print(f1())
,表明这时f1
完全是个数字。
- 1
遗忘的rrtt
我没太搞懂增加一层函数g的意义是什么。不增加也可以做到输出1,4,9啊。像这样:
输出也是1,4,9啊