今天小a问了我一个问题,
小a:“map怎么用?”
我:“啊,这样啊:
小a:”那我想要每个字符串前面2个0怎么办?“
我:”可以这样:
小a:“那我下次想要4个0怎么办?”
我:“可以用闭包,像这样:
这里运用了闭包,拿上述的代码来说,我调用了newstr2,但是不管我给了i什么参数,最后返回的都是newstr。那也就是说其实相当于我还是调用了newstr,这......意义在哪里呢?我们知道变量是可以向下传递的,newstr2函数里变量i是可以给newstr函数用的,那我们是不是就可以在不改变原函数的参数传递情况下,而对这个函数加以改变和修饰?
newstr3 = newstr2(10) #newstr3是一个函数对象
def newstr4(n):
return str(n).zfill(10)
这里的newstr3实际运行中就相当于函数newstr4.
而闭包最神奇之处就是装饰器的使用了,比如函数运行中有个算法如果运行时间超过1分钟,我就跳过换另一个算法运行计算,这怎么实现呢?
闭包:
这篇文章解释的挺好可以看下:
领取 专属20元代金券
Get大咖技术交流圈