|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def test3():
func_list = []
for i in range(1,4):
def test4():
return i**2
func_list.append(test4)
return func_list
f1,f2,f3 = test3()
print(f1(),f2(),f3())
这段代码中的问题出在闭包(closure)上。当你在test3()函数中定义test4()函数时,它会捕获i变量的引用,而不是它的值。当test3()循环结束时,i的值变为3。所以,当你调用f1(), f2()和f3()时,它们实际上都引用了同一个i变量,而此时i的值为3。
这就是为什么你得到的结果是9, 9, 9,而不是1, 4, 9。为了解决这个问题,你可以使用一个默认参数来捕获i的当前值,这样每个test4函数实例都有一个不同的i值。这是修改后的代码:
- def test3():
- func_list = []
- for i in range(1, 4):
- def test4(i=i):
- return i**2
- func_list.append(test4)
- return func_list
- f1, f2, f3 = test3()
- print(f1(), f2(), f3()) # 输出将是 1, 4, 9
复制代码
现在,每个test4函数实例都有一个与i当前值相对应的默认参数,所以输出结果将是1, 4, 9。
|
|