python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器
什么是迭代器:
迭代器是一个可以记住遍历的位置对象
迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退。
迭代器有两个基本方法:iter ,next 方法
内置函数iter(),next() 本质上都是用的对象.__iter__(),__next__()的方法
内置函数 iter(iterable),表示把可迭代对象 变成迭代器(iterator)
内置函数next(iterator) ,表示查看下一次迭代的值(当然也可以用 iterator.__next__() ,查看下一次迭代的值)
1.1.2迭代器协议
1.迭代器(iterator)协议是指:对象必须提供一共next方法,执行该方法妖魔返回迭代中的下一项,要么就引起一个Stopiteration异常,已终止迭代。
2.可迭代对象:实现了迭代器协议的对象,(该对象内部定义了一个__iter__()的方法 例:str.__iter__())就是可迭代对象
3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如。for循环,sum,min,max函数等)使用迭代器协议访问对象
1.1.3python中的for循环
for循环本质:循环所有对象,全部是使用迭代器协议
(字符串,列表,元祖,字典,集合,文件对象),这些都不是可迭代对象,只不过在for循环,调用了他们内部的__iter__方法,把他们变成了可迭代对象。然后for循环调用可迭代对象的__next__方法去去找,然后for循环会自动捕捉StopIteration异常,来终止循环。
#单线程一边发送,一边执行 import time def consumer(name): print("%s 准备吃包子啦!" %name) while True: baozi = yield print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) def producer(name): c = consumer('A') c2 = consumer('B') c.__next__() c2.__next__() print("老子开始准备做包子啦!") for i in range(10): time.sleep(1) print("做了2个包子!") c.send(i) #发送的值,就是yield的返回值 c2.send(i) producer("xixi")yield生成器,单线程并发
1.2.3生成器函数总结
1.生成器函数语法上和普通函数类似:生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值
2.生成器自动实现迭代器协议,迭代完,就不能再次迭代。
3.状态挂起:生成器使用yield语句返回一个值。挂起该生成器函数的状态。
- Python 生成器函数,生成器表达式,迭代器,列表解析
- Py修行路 python基础 (十二) 协程函数应用 列表生成式 生成器表达式
- python3 列表生成式、生成器、迭代器
- python 列表生成式、生成器、迭代器、yield
- Python高级特性(切片,迭代,列表生成式、生成器、迭代器)
- python--迭代器,生成器,三元表达式,列表解析,生成器表达式
- Python学习 Day 4 函数 切片 迭代 列表生成式 生成器
- python(四)上:列表生成式、生成器、迭代器和内置函数
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- Python基础-列表生成式和生成器表达式
- python学习 生成器 列表生成式 迭代器
- Python高级特性(切片 迭代 列表生成式 生成器 迭代器)学习笔记
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
- 【Python】[高级特性]切片,迭代,列表生成式,生成器,迭代器
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- Python day5:列表生成式,生成器,迭代器
- python基础之协程函数、列表表达式、生成器表达式
- Python基础-列表生成式和生成器表达式
- python基础----列表生成式、生成器表达式
- Python笔记-列表生成式、生成器generator(包括斐波拉契数列)、迭代器Iterator