zoukankan      html  css  js  c++  java
  • python容器迭代器生成器


    title: python之容器迭代器生成器
    data: 2018-4-7
    categories:

    • python
      tags:
    • python

    放张图片
    enter description here

    容器(container)

    容器是用来储存元素的一种数据结构,容器将所有数据保存在内存中,Python中典型的容器有:list,set,dict,str等等。

    class test():
        def __init__(self,data=1):
            self.data = data
    
        def __iter__(self):
            return self
        def __next__(self):
            if self.data > 5:
                raise StopIteration
            else:
                self.data+=1
                return self.data
    
    for item in test(3):
        print(item)
    
    4
    5
    6
    1234
    

    for … in… 这个语句其实做了两件事。第一件事是获得一个可迭代器,即调用了__iter__()函数。
    第二件事是循环的过程,循环调用__next__()函数。

    对于test这个类来说,它定义了__iter__和__next__函数,所以是一个可迭代的类,也可以说是一个可迭代的对象(Python中一切皆对象)。

    迭代器

    含有__next__()函数的对象都是一个迭代器,所以test也可以说是一个迭代器。如果去掉__itet__()函数,test这个类也不会报错。如下代码所示:

    class test():
        def __init__(self,data=1):
            self.data = data
    
        def __next__(self):
            if self.data > 5:
                raise StopIteration
            else:
                self.data+=1
                return self.data
    
    t = test(3)   
    for i in range(3):
        print(t.__next__())
    
    4
    5
    6
    1234
    

    生成器

    生成器是一种特殊的迭代器。当调用fib()函数时,生成器实例化并返回,这时并不会执行任何代码,生成器处于空闲状态,注意这里prev, curr = 0, 1并未执行。然后这个生成器被包含在list()中,list会根据传进来的参数生成一个列表,所以它对fib()对象(一切皆对象,函数也是对象)调用__next()__方法,

    def fib(end = 1000):
        prev,curr=0,1
        while curr < end:
            yield curr
            prev,curr=curr,curr+prev
    
    print(list(fib()))
    
    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
    
    
  • 相关阅读:
    洛谷 1850 NOIP2016提高组 换教室
    2018牛客多校第三场 C.Shuffle Cards
    2018牛客多校第一场 B.Symmetric Matrix
    2018牛客多校第一场 A.Monotonic Matrix
    2018牛客多校第一场 D.Two Graphs
    2018宁夏邀请赛L Continuous Intervals
    2018宁夏邀请赛K Vertex Covers
    BZOJ
    HDU
    ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015)
  • 原文地址:https://www.cnblogs.com/id88/p/14210864.html
Copyright © 2011-2022 走看看