例子里fs不是是一个列表吗,为什么f1(),f2(),f3()的结果会是一个数值呢?而且结果都是9。这点我没看懂。我也没动i为什么是3。。。我以为三个结果都是[1,4,9]。。。菜鸟求大神解答啊!!!
例子里fs不是是一个列表吗,为什么f1(),f2(),f3()的结果会是一个数值呢?而且结果都是9。这点我没看懂。我也没动i为什么是3。。。我以为三个结果都是[1,4,9]。。。菜鸟求大神解答啊!!!
例子里fs不是是一个列表吗,为什么f1(),f2(),f3()的结果会是一个数值呢?而且结果都是9。这点我没看懂。我也没动i为什么是3。。。我以为三个结果都是[1,4,9]。。。菜鸟求大神解答啊!!!
2018-06-29
def count(): fs = [] for i in range(1, 4): def f(): return i * i fs.append(f) return fsf1, f2, f3 = count()print(f1) print(f2)print(f3)#输出结果<function count.<locals>.f at 0x0000024878ECC268><function count.<locals>.f at 0x0000024878ECC268><function count.<locals>.f at 0x0000024878ECC268>print(f1())print(f2())print(f3())#输出结果999
def count():
# fs是一个装有函数引用的数组
fs = []
for i in range(1, 4):
def f(x):
def g():
return x * x
return g
fs.append(f(i)) # 在这里装入的g,f(i)执行返回的是g函数的引用
return fs
# 这个地方将fs数组中的fun引用自动解包到了3个变量中,也就是说f1、2、3都是g函数对象,每个函数里持有的x都不同,因为经过def f(x):后x经过参数传递后会复制值而不是传递引用
f1, f2, f3 = count()
print("{} {} {}".format(f1(), f2(), f3()))
# 得出,下面是伪码:
f1 == def g():
return 1 * 1
f2 == def g():
return 2 * 2
f3 == def g():
return 3 * 3
# 所以最终输出
1 4 9
举报