#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