Python语法返回函数与闭包

参考资料:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431835236741e42daf5af6514f1a8917b8aaadff31bf000
函数作为返回值

1 def lazy_sum(*args):
2   def sum():
3        ax = 0
4       for n in args:
5           ax = ax + n
6       return ax
7    return sum

理解:执行顺序是1 2 7 返回一个函数
内部函数可以引用外部函数的参数和局部变量,返回函数时,相关参数与变量都保存在返回函数中,称为闭包。闭包需要注意以下请款。

闭包

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

注意:返回的函数并没有马上执行,此时返回的三个函数都引用了外部函数 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

注意: 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

你可能感兴趣的:(Python语法返回函数与闭包)