python初学心得体会(Python进阶之路第六篇-装饰器、生成器)python初学 / python装饰器与生成器...

wufei123 发布于 2024-05-14 阅读(35)

生成器通过列表生成式,我们可以直接创建一个列表,但是收到内存限制,列表的内容肯定是有限的所以,如果列表的元素可以通过某种算法推导出,那我们是否可以在循坏的过程中不断推算到后续的元素,这样就不必创建完整的list,从而节省大量的空间。

在Python中,这种边循坏边计算的机制,叫做生成器:generator创建生成器的方法1只要把列表生成式的[]改为()

创建L和G 的区别仅在于最外边的[]和(),L是个列表,而G 是个生成器,我们可以打印L 的每一个元素,但我们怎么打印G 的每一个元素呢?如果要一个一个打印出来,就要通过next()函数获得生成器的下一个返回值。

创建生成器的方法2generator非常强大,如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数实现,比如:著名的斐波那契数列,除了第一个数和第二个数之外,任意一个数都等于前两个数的和

1 1 2 3 5 8 13 21 36 ......

生成器的特点节约内存迭代到下一次调用时,所有的参数都是上一次保留下来的,即是说,在整个所有函数调用的参数都是第一次所调用时保存的,而不是新创建的装饰器功能引入日志函数执行时间统计执行函数前预备处理执行函数后清理功能

权限效验等场景缓存装饰器示例无参数的函数

上面代码理解装饰器执行行为可理解成foo timefun( foo)#foo先作为参数赋值给func后,foo接收指向 timefun返回的 wrappedfuncToo#调用foo(),即等价调用 wrappedfunc(

#内部函数 wrappedfund被引|用,所以外部函数的func变量(自由变量)并没有释放#func里保存的是原foo函数对象被封装的函数有参数

被修饰的函数又不定长参数

装饰器里的return

执行结果:

装饰器带参数,在原有装饰器的而基础上,设置外部变量

可以理解为:foo()==timefun_args("itcast")(foo)()

点击关注发私信(基础视频),即可获取下载链接:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻8087