Python 再学习2

Python 再学习2

迭代器

迭代器是访问集合元素的一种方式。他从集合的第一个元素开始访问,直到访问完集合,只前进不后退

可迭代对象iterable:

凡是可以返回一个迭代器iterator的对象都可称之为可迭代对象

常用的几种:

1、      集合数据类型:如:list、tuple、dict、set、str等

2、      生成器(包括带yield的generator function)

这些都对象可以用于for循环

这里的实际执行为

自定义迭代器

可以被next()调用并不但返回下一个值的称为iterator。

作为迭代器对象,它需要定义它的两个魔术对象:__next__和__iter__;

next返回下一个元素

iter返回迭代器本身

自定义迭代器:

这里f在执行next之后会保存自己内部的状态

闭包:

学术解释:内部函数对外部函数作用域里变量的引用则称内部函数为闭包。

白话解释:在函数内部定义一个函数,并且这个函数用到了外边函数的变量。


注意:python中任何东西都是对象,包括函数。

闭包的作用:

优点:

优化了变量,原来需要类对象完成的工作,闭包就可以搞定了

缺点:

由于引入了外部函数的变量,导致外部函数的局部变量没法及时释放,消耗内存。

装饰器:

什么是装饰器:

在python中的装饰器的使用格式很像java里面的注解,但是两者区别还是很大的。

注解(Annotation):仅提供附加元数据支持,并不能实现任何操作。需要另外的 Scanner 根据元数据执行相应操作。

装饰器(Decorator):仅提供定义劫持,能够对类及其方法的定义,但没有提供任何附加元数据的功能。

定义很拗口,简而言之就是两个东西!

给定一个场景:

一个模块有一个功能f1,

但是功能有权限限定,在使用之前需要检查权限,最简单的方法可以写成:


但是这样就破快了代码的开闭原则。

这样我们可以用装饰器来解决:


python的解释器执行的时候会:

1、      def  w1(func) ==> 将w1函数加载到内存

2、      @w1

也就是会会将f1当做函数对象传入到w1中,然后将装饰后的函数对象返回,并再次命名为f1。

自定义修饰器:

无参数

有参数

结果是:

装饰器自带参数:

装饰器作用:

装饰器作用很多,目的是在满足开闭原则的情况下对已有函数进行修饰。

大概可能用到的地方有:

1、      引入日志

2、      函数执行时间统计

3、      执行函数前预备处理

4、      执行函数后的清理

5、      权限校验

猜你喜欢

转载自blog.csdn.net/u011486491/article/details/79099382