迭代器,生成器

迭代器

W?

迭代是指重复迭代每一次都是基于上一次的结果而来

作用?

提供一种不依赖与搜引的取值方式

l = [1,2,3] i = 0 while i <len(l): print(l[i]) i+=1

需要迭代的取值的有:字符串,列表,元组,字典,集合

字典。集合是无序的,无法依赖索引值取值,就需要迭代器

可迭代对象

str , list, dict , tuple , set , f

都是可迭代对象,只要内置有 .(——iter——)方法的都是可迭代对象

 

 

迭代器对象——迭代器对象也是可迭代对象

获取迭代器,通过(——iter——)方法,返回值就是迭代器对象

 

如何迭代取值:迭代器对象.——next——

每一次执行都会从迭代器对象取值

优点:

索引不依赖索引值

节省内存空间

缺点:

取某个值麻烦

每次取值都从第一个开始,无法索引

得带器对象一定是可迭代对象,不一定是迭代器对象

f文件类型是可迭代对象,也是迭代器对象 迭代器对象调用多少次iter方法得到的还是迭代器对象本身 这就是f 可以用for函数的原因

 

 

l = [1,2,3] l =l.iter() while True: try: print(l.next()) except StopIteration: break

可迭代对象,只要有iter 内置函数就说明是可迭代对象 可迭代对象加上.--iter--后返回值就是迭代器对象

for函数就是把可迭代对象转化为迭代器对象,内置whil,try函数,用.next不断取值从而实现迭代功能 迭代器:就是一种不依赖于索引取值的方式

生成器:本质上是一个自定义的迭代器,(自己创造)

def funnc(): print('from func')#调用不执行,.next()执行到yield的返回值后停止 yield 1 res = funnc() #生成器对象——迭代器对象 print(res.next())

yield:

只能在函数内部定义,不能外部使用,

每一次yeild都会往生成器对象添加一个值,保存函数暂停状态

凡是包含yeild 调用都不会执行代码,而是得到一个返回值,该返回值就是生成器对象

 

自定义生成器: def my_range(start,end ,move =1): while start<= end: #实现顾头又顾尾巴 yield start start+=move

for i in my_range(1,10): print(i) yield 与return 区别: 相同:返回值个数、类型都是无限制的 不同:return 返回一次值函数结束,yied返回多次值

三元表达式: 普通表达式 def max (m,n): if m> n: return m else:n 三元表达式 def max2(m,n): res = n if n> m else m return res print(max2(1,2))

列表生成式:一行的代码生成列表 语法:[] 优点:可以索引取值 缺点:浪费内存

list1 = [f'a{i}' for i in range(1,100)] print(list1) 列表后边可以加if判断 #输出大于五十加上个大字 list2 = [f'大{i}' for i in range(1,100) if i>50] print(list2)

生成器生成式:又名生成器表达式 语法:() 优点:节约资源 缺点:取值麻烦 g = (i for i in range(100)) print(g)

 

匿名函数

临时存在,一次性使用

注意:不能单独使用,需要配合内置函数一起使用

 

lambda 参数 :返回值

请按照年龄排序 l = [ {'name':'alex','age':84}, {'name':'oldboy','age':73}, {'name':'egon','age':18}, ] res =sorted(l, key=lambda x :x['age']) res1 =sorted(l,reverse=True, key=lambda x :x['age'])

posted @ 2019-11-14 21:36  D山仙  阅读(76)  评论(0编辑  收藏  举报