迭代器09

迭代器:对象需要提供next()方法,它要么返回下一个对象,要么引起一个stopiteration异常

*如果对象是迭代器对象,必须使用next()方法

迭代器是访问集合(列表,元组,字典,能大量存储大量数据)内元素的一种方式。

迭代器对象从集合的第一个元素开始访问,直到所有元素都被访问一遍。

for    max    min    sum等使用迭代器协议访问对象

迭代器的好处:以一种延迟计算(lazyevaluation)方式返回元素。

它并不是一次性调用所用数据,而是等调用next()方法才返回该元素。

生成器:Python使用生成器对延迟操作提供了支持。
优点:在需要的时候产生结果,而不是立即产生结果。不占内存,代码简洁。

Python两种不同的方式提供生成器:

1、生成器函数:常规函数定义,使用 yield 语句而不是return语句返回一个结果。在每个结果中间,挂起函数的状态,

以便下次重离开的地方继续执行结果。yield语句一次。

2、生成器表达式:类似于 推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表。

def    testlist():

            for    i    in    range(10000):

                            yield    i

m=testlist()

            for    j    in    m:

                            print(j)    #生成器中的元素

print(m)    #输出的是生成器产生的对象地址。


def asd(N):
res=[]
for i in range(N):
    res.append(i*i)
return res
for as in asd(10000000):
print (as)

def asd(N):
    for i in range(N):
         yield i*i
for as in asd(10000000):#这个就相当于调用了next方法

print(as)

a=(x**2 for x in range(5))

print(a)

得到生成器的第一种方式:将列表中的中括号替换成圆括号,就是一个生成器表达式,里面可以写推导。

生成器只要调用next()方法即可得到下一个值,到最后一个异常(stopiteration)退出
例:test=(x for x in rang(10))

next(test)或test.__next__()

第二种:在方法内使用yield做生成器,这样调用此方法,会得出一个结果:generator object。  然后也是可以调用next()。每到yield时,就会停止,返回当前这个值,可以一次次next()调用,看看运行过程

生成器:
1.语法上和函数类似:生成器函数和常规函数几乎是一样的。它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值。
2.自动实现迭代器协议:对于生成器,Python会自动实现迭代器协议以便应用到迭代背景中的(如for循环 sum函数)。由于生成器实现了迭代器协议,所以,我们调用它的next方法,并且,在没有值可以返回的时候,生成器自动产生stopiteration异常。
3.状态挂起:生成器使用yield语句返回一个值。yield语挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行。

4.生成器只能遍历一次。

多态:
类属性:属于类的属性,在对象外面开辟空间,所有对象共有的
类方法:在方法上添加@classmethod     方法(cls)    类名.方法()或对象.方法()
例如:
@classmethod
def asd(cls)
可以通过类方法调用类属性,也可以通过对象调用类属性


静态方法:方法前加@staticmethod,方法()    类名.方法()或对象.方法()

静态方法没有参数,静态方法即和类没关系,也和对象没关系,也可以通过类和对象调用。

def  __new__(cls):构造方法,生成新对象,在__init__()之前调用。

单例:只有一个类,只能有一个对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值