讲课内容:闭包装饰器迭代器生成器列表推导式,生成器表达式匿名函数内置函数(sorted,map,filter,reduce)一.闭包首先我们必须先搞明白这样一个事情,函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量.1.函数名的内存地址deffunc():print("呵呵")print(func)结果:2.函数名可以赋值给其他变量deffunc():print("呵呵")print(func)a=func#把函数当成一个变量赋值给另一个变量a()#函数调用func()3.函数名可以当做容器类的元素deffunc1():print("呵呵")deffunc2():print("呵呵")deffunc3():print("呵呵")deffunc4():print("呵呵")lst=[func1,func2,func3]foriinlst:i()4.函数名可以当做函数的参数deffunc():print("吃了么")deffunc2(fn):print("我是func2")fn()#执行传递过来的fnprint("我是func2")func2(func)#把函数func当成参数传递给func2的参数fn.5.函数名可以作为函数的返回值deffunc_1():print("这里是函数1")deffunc_2():print("这里是函数2")print("这里是函数1")returnfunc_2fn=func_1()#执行函数1.函数1返回的是函数2,这时fn指向的就是上面函数2fn()#执行上面返回的函数闭包.其实很简单.就是内层函数使用了外层函数中的变量,就是闭包defouter():a=10definner():print(a)#这个就是闭包returninner#闭包通常都是返回内层函数闭包有什么用呢.注意看了.当我们外部访问了这个outer()函数.得到的结果就是inner函数a=outer()此时.我们拿到了一个变量a.而这个变量a是outer()的返回值.也就是inner函数.所以.我们可以a()#此时执行的是inner这个函数由于函数inner的执行时间是在outer()外部.这就决定了inner执行的时间我们是不确定的.而变量a是一个局部变量.正常情况下执行玩儿outer(),它就没有意义了.但是,此时由于inner函数执行时间的不确定.又必须保证inner能正常执行.python就规定.闭包函数中使用的变量会常驻于内存.而且.在outer()外部.是无法改变这个值的.故称:闭包.目的有两个:其一是不许外面改变这个变量.其二是让这个变量常驻于内存.闭包的应用:装饰器二.装饰器装饰器是干嘛的呢?它是一种固定的语法.可以让我们在不修改原有函数内部代码的基础上,给函数增加新的功能.defadd():passdefdelete():passdefupdate():passdefsearch():pass此时,我想给每个函数添加一个新功能.记录日志.记录一下.在xxx时间执行的xxx函数.defadd():#记录日志的代码passdefdelete():#记录日志的代码passdefupdate():#记录日...