讨论区 老师答疑区 主题详情
690151308
老师参与 def lazy_sum(*args): def sum(): ax = 0 for n in args: ax = ax + n return ax return sum f = lazy_sum(1, 3, 5, 7, 9) f()

求指导,这个程序如何理解?

课程

所有回复(1)

这个应该是廖老师教程里的例子。


例子返回一个保存有自己变量args的函数。这就叫闭包。闭包的关键在于有自己的变量。不过这个例子并没有把闭包的功能很明显的展示出来。这个例子主要是说返回函数的。


如果要理解闭包,我在闭包教程里用了棋子的例子func_closure2.py,解释了函数自己的变量用途。如果看过闭包这节教程的可以继续看看下面的程序结果是什么。


我把这个例子修改成下面这个用来理解闭包会更好些:


比如我希望加法是不断累加的,比如网站的计数器,而且它有两个参数,一个初始值,一个是否用绝对值,这两个参数我们用list传送进去。


大家不执行看看能否推算出下面程序的输出:


def accu_sum(list_args):     def sum(*args):         ax = list_args[0]         if list_args[1]:             for n in args:                 ax = ax + abs(n)         else:             for n in args:                 ax = ax + n                 list_args[0] = ax         return ax              return sum      fabs = accu_sum([0,1]) fnoabs = accu_sum([0,0]) print f(1, 3, 5, 7, 9) print fabs(-1, -3, -5, -7, -9) print fnoabs(1, 3, 5, 7, 9) print fnoabs(-1, -3, -5, -7, -9)


回复

最近活动:
创建时间:
浏览次数:1516
关注人数:0