迭代器
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'])