实例讲解Python生成器的概念

2025-05-29 08:49:16

1、打开Python开发工具IDLE,新建‘gen.py’文件,写代码如下:list1 = [x for x in range(10)]print (list1)gen1 = (x for x in range(10))print (gen1)创建列表和生成器,上面的区别仅仅是中括号和小括号。

实例讲解Python生成器的概念

2、F5运行程序,打印出列表和生成器对象[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<generator object <genexpr> at 0x0000000002F39E58>

实例讲解Python生成器的概念

3、遍历生成器对象才能正常打印出内容。另一种访问方式是gen1.next()list1 = [x for x in range(10)]print (list1)gen1 = (x for x in range(10))print (gen1)for i in gen1: print (i)

实例讲解Python生成器的概念

4、F5运行程序,生成器的内容逐个打印,所以说生成器也是迭代器一种。[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<generator object <genexpr> at 0x0000000002F39E58>0123456789

实例讲解Python生成器的概念

5、另一种生成器是yield生成器,当一个函数里有鲻戟缒男yield那么这个函数就是一个生成器,测试代码如下;list1 = [x for x in range烫喇霰嘴(10)]print (list1)gen1 = (x for x in range(10))print (gen1)for i in gen1: print (i)def yieldfun(): print ('begin') r = yield 'a' print ('end')s = yieldfun()print (type(s))

实例讲解Python生成器的概念

6、F5运行程序,可以发现s是一个生成器对象[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<generator object <genexpr> at 0x0000000002F39E58>0123456789<class 'generator'>

实例讲解Python生成器的概念

7、Python3中生成器的next(),要写成__next__(),完整代码如下:list1 = [x for x in r锾攒揉敫ange(10)]print (list1)gen1 = (x for x in range(10))print (gen1)for i in gen1: print (i)def yieldfun(): print ('begin') r = yield 'a' print ('end')s = yieldfun()print (type(s))s.__next__()

实例讲解Python生成器的概念

8、F5运行程序,程序执行到yield卡住,相当于函数已经返回,不影响程序向下执行

实例讲解Python生成器的概念

9、继续改写代码,执行yield下面的代码,可以继续用__next__(),或者send给 r 传值list1 = [x for 旌忭檀挢x in range(10)]print (list1)gen1 = (x for x in range(10))print (gen1)for i in gen1: print (i)def yieldfun(): print ('begin') r = yield 'a' print (r) print ('end')s = yieldfun()print (type(s))s.__next__()s.send('x')

实例讲解Python生成器的概念

10、F5运行程序,因为程序中只有一个yield。所以程序会报错,在实际应用中,yield 一般是一个函数,函数返回值通过send方式传递,程序捕获异常并处理

实例讲解Python生成器的概念
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢