Discuss / Python / 返回函数-交个lambda版作业

返回函数-交个lambda版作业

Topic source
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())
  1. 内部函数可以引用外部函数的参数和局部变量,函数返回时,相关参数和变量都保存在返回的函数中。
  2. 【返回函数不要引用任何循环变量,或者后续会发生变化的变量。】,因为返回的函数并没有立刻执行,而是直到调用了f()才执行

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了,”


  • 1

Reply