列表生成式:[exp for iter_var in iterable]
同样也会有字典生成式,集合生成式,没有元组生成式,元组生成式的语法被占用了
字典生成式,集合生成式,就是外面那个括号换成{} 字典里面一个个是键值对,集合可以与之区分
生成器:有两种写法:
一种就是写一个生成式放到()里面,这就是一个生成器,
1 #将列表生成式中的[]替换成() 2 ge = (x for x in range(1,6)) 3 print(ge,type(ge)) 4 5 #生成器需要通过next()方法获取数据,调用一次则返回一个数据 6 print(next(ge)) 7 print(next(ge)) 8 print(next(ge)) 9 print(next(ge)) 10 print(next(ge))
yiled表达式
yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执
1 #通过函数和yield关键字生成 2 #使用了 yield 的函数被称为生成器(generator) 3 #yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行 4 def test(n): 5 for i in range(1,n + 1): 6 yield i 7 #print(i) 8 #得到生成器 9 result = test(10) 10 print(result) 11 12 #生成器只能遍历一次, 所以下面不会有任何输出 13 for x in result: 14 print(x) 15
迭代对象:可以用for in 结构的都是迭代对象,常用的有list , set ,tuple ,dict, str,生成器
判断是否是迭代器,可以用isinstance(,Iterable)判断,需要导入Iterable
1 #引入 from collection import Iterable 2 from collections import Iterable 3 print(isinstance("",Iterable))#True 4 print(isinstance({},Iterable))#True 5 print(isinstance((),Iterable))#True 6 print(isinstance(1,Iterable))#False
迭代器:那些生成器都是迭代器,迭代器都是迭代对象,但是迭代对象不一定是迭代器
判断方式也是用同一个函数参数要换成Iterator 需要导入Iterator , Iterable
1 from collections import Iterator,Iterable 2 print(isinstance([],Iterator)) #False 3 print(isinstance((),Iterator)) #False 4 print(isinstance({},Iterator)) #False 5 print(isinstance("",Iterator)) #False 6 print(isinstance((x for x in range(0,6)),Iterator)) #True 生成器是迭代器 7 print(isinstance((x for x in range(0,6)),Iterable)) #True 生成器也是迭代对象
迭代器可以和迭代对象之间转换
1 print(isinstance(iter([]),Iterator)) #True 2 print(isinstance(iter(()),Iterator)) #True 3 print(isinstance(iter({}),Iterator)) #True 4 print(isinstance(iter(""),Iterator)) #True 5 6 l2 = iter(l1) #将列表转换为迭代器 7 print(next(l2)) #使用next获取迭代器中的元素