python_如何使用生成器实现可迭代对象?

案例分析:

实一个可迭代对象的类,它能迭代出给定范围内所有的素数:

pn = Number(1, 30)

for k in pn:

print(k)

结果为:2,3,5,7,11,13,17,19,23,29

如何解决这个问题?

将该类的__iter__方法实现成生成器函数,每次yield返回一个素数

#!/usr/bin/python3

class Number(object):
    def __init__(self, start, end):
        self.start = start
        self.end = end

    # 判断一个数字是否是素数
    def get_num(self, k):
        if k >= 2:
            for i in range(2, k):
                if k % i == 0:
                    return False
            return True

    def __iter__(self):
        for k in range(self.start, self.end+1):
            if self.get_num(k):
                # 是素数yield出去
                yield k

if __name__ == ‘__main__‘:
    num = Number(2, 30)
    for i in num:
        print(i)
时间: 2024-12-18 17:45:49

python_如何使用生成器实现可迭代对象?的相关文章

5.1.24 Python之列表生成式、生成器、可迭代对象与迭代器

语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法糖的概念 "语法糖",从字面上看应该是一种语法."糖",可以理解为简单.简洁.其实我们也已经意识到,没有这些被称为"语法糖"的语法,我们也能实现相应的功能,而 "语法糖"使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这

python之迭代器、生成器、可迭代对象

迭代器 iterator 迭代,即一些事要重复好多次,就像在循环中做的那样. 一个对象是否可迭代,全都取决于这个对象是否有__iter__方法,只要该对象实现了__iter__方法,调用对象的__iter__方法,就回返回一个迭代器,这个迭代器一定具有next方法(调用这个方法时不需要任何参数),在调用这个迭代器的next方法时,迭代器就回返回它的下一个值,当迭代器中没有值可以返回了,就回抛出一个名为StopIteration的异常,停止迭代. 准确的说,一个实现了__iter__方法的对象是可

3-3利用生成器实现可迭代对象

包含yield语句的函数就是生成器函数.函数里有yield关键字,则是生成器,生成器内置有__iter__方法,只不过调用__iter__返回的是生成器本身,利用这一特性,可以创建一个可迭代对象的类. 生成器即实现了,next迭代器对象,同时也实现了__iter__()可迭代对象,返回的是他自身 >>> def f(): print('1111') yield 1 #当调用next()时 yield会把后面的内容返回,但保存当前状态,下次调用next()时继续执行. print('222

生成器和可迭代对象和迭代器

1.可迭代对象(Iterable): 可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 其中包括 迭代器(Iterator) 和 生成器(generator) 2.迭代器(Iterator): 可以被next()函数调用并不断返回下一个值的对象称之为迭代器:Iterator 3.生成器(generator): 一边循环一边计算的机制,称为生成器:generator 总结: 1.生成器是特殊的迭代器 2.迭代器和生成器都是可迭代对象 原文地址:https://www.cnbl

迭代器、生成器、可迭代对象

1.如果一个对象同时含有__iter__()方法和next()方法,那他就是一个迭代器 2.只含有__iter__()方法,并且该方法返回一个迭代器,那他就是一个可迭代对象 3.只有next方法,啥都不是.但是可以直接用next(obj)调用该对象.next(obj)方法的本质就是调用obj对象的next()方法,无论obj对象是否为迭代器 举例来说,Python的list数据类型: print dir([1,2,3]) >> ['__add__', '__class__', '__conta

python的生成器与迭代器和可迭代对象

来简单的说下python中的生成器和可迭代对象以及迭代器的问题.只是简单地记录一下并不涉及太深入的内容. 首先来说一下什么是生成器,先看下面的代码: 1 #_*_ coding:utf-8 _*_ 2 3 result = (x for x in range(10)) 4 5 ''' 6 下面print的打印结果 7 <generator object <genexpr> at 0x0000026FA092B360> 8 ''' 9 print(result)  上面的这种代码其实

Python教程·迭代、可迭代对象、迭代器与生成器详解

iteration(迭代) 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 只要是可迭代对象(Iterable),就可以通过for循环来遍历,这种遍历我们称为迭代. 也就是说所有可作用于for循环的对象都是可迭代对象(Iterable). 那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断: >>> from collections import Iterable >>> isinstance(123,I

Python 迭代对象、迭代器、生成器详解

在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict comprehension)众多概念参杂在一起,难免让初学者一头雾水,本文将一一为大家进行介绍,希望对大家学习python有所帮助. 容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用 in ,  not in 关键字判断元素是否包含在容器

学习7: 列表生成式,生成器,迭代器,可迭代对象

1) 列表生成式,即创建列表的方式 列表生成式,这里是中括号[] >>> [x*x for x in range(0,10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] >>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ