python编程基础之二十七

列表生成式:[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))
View Code

 

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       
View Code

 

迭代对象:可以用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
View Code

 

迭代器:那些生成器都是迭代器,迭代器都是迭代对象,但是迭代对象不一定是迭代器

判断方式也是用同一个函数参数要换成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获取迭代器中的元素
View Code

 

posted @ 2018-08-08 11:34  嗨哥-higer  阅读(87)  评论(0编辑  收藏  举报