迭代器与生成器

#coding=utf-8
"""
1、列表生成式
"""
list1 = [i for i in range(10)]
print list1
"""生成器 generator 只有在调用的时候才会生成相应的数值、只记录当前位置,
只有一个__next__方法.python2.7里面是next()一般不用此方法,会使用for循环来遍历生成器

"""
list1 = (i for i in range(10))
print list1
#
#
# a= 1
# b=2
# a,b = b,a+b
# #相当于
# t = (b,a+b)
# a = t[0]
# b = t[1]

#生成器函数实例
def fib(value):
    i,j,z = 0,0,1
    while i < value:
        yield z
        j,z = z, j+z
        i +=1
#   return "end"   python2中不支持return


# fiber = fib(10)
# fiber.next()
# fiber.next()
# fiber.next()

#生成器并行的实例
import time
def consumer(name):
    print ("%s 准备"%name)
    while True:
        i = yield
        print ("%s is coming %s please ready"%(i,name))

a = consumer("liming")
a.next()
a.next()

def product():
    people1 = consumer("xiaoming")
    people2 = consumer("xiaohua")
    people1.next()
    people2.next()

    print ("接下来我准备发球了")
    for i in range(10):
        time.sleep(3)
        print ("发球了")
        people1.send("第"+str(i)+"颗球")
        people2.send("第"+str(i)+"颗球")

#product()
#可迭代的数据类型 列表 、元组、字典、集合、字符串 还有生成器,
#可迭代对象又称Iterable  可以使用isinstance判断一个对象是否是某个对象
#可以使用for循环遍历的对象称为可迭代对象,
#可以被next()函数调用,并不断返回下一个值的对象称为迭代器 Iterator

from collections import Iterable,Iterator
print isinstance([],Iterable)   #判断迭代对象

isinstance([],Iterator)    #判断迭代器
print isinstance([i for i in range(10)],Iterator)
print isinstance((i for i in range(10)),Iterator)      #注意两个的区别

#把可迭代对象变成迭代器,之后就可以使用next()函数了
i = iter([i for i in range(10)])
print "iter()函数",isinstance(i,Iterator)

list = [i for i in range(100) if i/2!=0]
print list

 

posted @ 2018-03-11 14:00  梦中琴歌  阅读(118)  评论(0编辑  收藏  举报