第二模块学习: 生成器,迭代器,内置函数
生成器特点:只有在调用时才会生成相应的数据,运行的速度快!
示例:
1 def fil(max):#斐波那契数 2 n,a,b=0,0,1 #定义初始数据 3 4 while n<max: 5 yield b 6 a,b=b,a+b #进进第二次的赋值 7 n+=1 8 9 10 return '---deno----' 11 12 a=fil(10) 13 while True: 14 try: 15 print(a.__next__())#打印返回值 16 except StopIteration as e:#异常返回 17 print('XXXXXX',e.value) 18 break
yield 生成器断点缓存 可赋于变量
.send()可以为yield 传值、数据
示例:
1 #利用生成器 可形成多并发 2 # 3 name_1='销售点A' 4 name_2='销售点B' 5 name_sc='大丰厂' 6 yf='衣服' 7 8 def a(name): 9 print("产品%s………准备完毕………"%name) 10 while True: 11 doc=yield#生成器断点缓存 12 print('%s在销售 33[32;1m%s 33[0m'%(name,doc))#传入打印出来 13 14 # c=a('销售点A') 15 # c.__next__()#首次运行加载 doc 16 # yf='衣服' 17 # c.send(yf) 18 # c.__next__() 19 # c.__next__() 20 # c.__next__() 21 def b(name): 22 print("产品%s………准备完毕………"%name) 23 while True: 24 doc=yield#生成器断点缓存 25 print('%s在销售 33[32;1m%s 33[0m'%(name,doc))#传入打印出来 26 27 def sc(name):#生产产家 28 29 c=a(name_1) 30 d=b(name_2) 31 c.__next__()#首次加载 32 d.__next__() 33 print('%s开始生产了…………'%name) 34 for x in range(10): 35 print('生产了%s件%s'%((x+1)*2,yf)) 36 c.send(yf) 37 d.send(yf) 38 39 sc(name_sc)
迭代器:Iterator
可以返回下一个值的迭代对象,就可以称为迭代器
迭代对象:Iterable
可以被for循环的对象,如列表,字典,字符串等,可以称为迭代对象!
iter() 可以将迭代对象转化有迭代器
生成器属于迭代器中的一种
内置函数:
1 abc(i)#返回绝对值 2 all()#当可迭代对象值都为真时才返回真 3 any()#当可迭代对象值有一个为真时就返回真 4 ascii()#可以将列表转为ascii表对应的字符串输出 5 bin()#十进制转二进制………………
1 #计算1+1到100的值 2 3 #return 返回 4 5 def test(num): 6 7 i=1 8 sumresult = 0 9 while i<=num: 10 sumresult = sumresult + i 11 i+=1 12 return sumresult 13 14 result = test(100) 15 print ('resolt = %d'%result)
1 #计算1+1到100的值 2 3 #return 返回 4 5 def test2(num): 6 7 if num>=1: 8 result = num + test2(num-1) 9 else: 10 result = 0 11 return result 12 13 result = test2(100) 14 print ('result = %d'%result)
1 #计算1+1到100的值 2 3 # return 返回 4 5 def test3(num): 6 if num>=1: 7 result =num * test3(num-1) 8 else: 9 result =1 10 return result 11 12 result = test3(4) 13 print ('result = %d'%result)