def count(): def f(j): return lambda: j*j fs=[] for i in range(1,4): fs.append(f(i)) return fs f1, f2, f3 = count() print(f1()) print(f2()) print(f3())
p.s:感谢ilovehusky的详细解读,以下为原话: “请再注意一点,当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数: f1 = lazy_sum(1, 3, 5, 7, 9) f2 = lazy_sum(1, 3, 5, 7, 9) f1==f2 False f1()和f2()的调用结果互不影响。注意原文,现在fs里保存了两个函数g,他们是不同的,不影响,也就是,第一个g里面是1×1,第二个g是2×2。最后的返回fs,里面有3个g函数,各不同,分别赋值给f1、f2、f3后,就是1,4,9了,”
Sign in to make a reply
九_努力成为BetterMe
p.s:感谢ilovehusky的详细解读,以下为原话: “请再注意一点,当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数: f1 = lazy_sum(1, 3, 5, 7, 9) f2 = lazy_sum(1, 3, 5, 7, 9) f1==f2 False f1()和f2()的调用结果互不影响。注意原文,现在fs里保存了两个函数g,他们是不同的,不影响,也就是,第一个g里面是1×1,第二个g是2×2。最后的返回fs,里面有3个g函数,各不同,分别赋值给f1、f2、f3后,就是1,4,9了,”