函数作为返回值
可变参数的求和
可以不返回求和的结果,而是返回求和的函数:
不需要立刻求和,而是在后面的代码中,根据需要再计算
def sum_nums(*args): sum = 0 for i in args: sum = sum + i return sum def lazy_sum(*args): def sum_nums(): ax = 0 for i in args: ax = ax + i return ax return sum_nums if __name__ == '__main__': print(sum_nums(1, 2, 3, 4, 5)) #15 print(lazy_sum(1,2,3,4,5)) #<function lazy_sum.<locals>.sum_nums at 0x000001D547F8B6A8> 返回的是函数 运行的时候需要调用函数 f1 = lazy_sum(1, 3, 5, 7, 9) f2 = lazy_sum(1, 3, 5, 7, 9) print(f1==f2) #False
闭包
注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用,所以,闭包用起来简单,实现起来可不容易。另一个需要注意的问题是,返回的函数并没有立刻执行,而是直到调用了f()才执行。