Day 13 迭代器\三元表达式\列表推导式\字典生成式\生成器\递归

迭代器\三元表达式\列表推导式\字典生成式\生成器\递归

迭代器

迭代器就是迭代的工具

可迭代的对象

python中内置有__iter__方法的对象,都是可迭代的对象
可迭代的对象:str,lsit,tuple,dict,set,file

迭代器对象

可迭代的对象执行__iter__方法得到的返回值,就是迭代器对象,并且迭代器对象会有一个__next__方法

try...execpt...异常处理模块

s='hello'
iter_s=s.__iter__()

while True:
    try:
        print(iter_s.__next__())
    except StopIteration:
        break

总结

可迭代对象:拥有__iter__方法的对象就是可迭代的对象,可迭代的对象不一定是迭代器对象
迭代器对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象.迭代器对象一定是可迭代对象,执行__next__方法拿到迭代器对象的一个值,执行__iter__方法得到迭代器本身
迭代器对象的缺点:取值麻烦,只能一个一个取,并且只能往后取值,值取了就没了;无法用len方法获取长度
文件本身既是可迭代对象,又是迭代器对象

for循环原理

三元表达式

a if 条件 else b

列表推导式

当需要循环取值并添加到列表里面去的时候

list=[i(取出的值可以进行操作) for 循环]

字典生成式

当需要循环取值并添加到一个字典中去的时候(字典中的key和value都与循环取出的值有关)

dict={key:value(key value都与i有关) for 循环条件}

拉链函数zip()

将括号中的两个数据类型以 key:value的形式添加到一个字典中去,功能类似字典的内置方法fromkeys

res = zip('abcd',[1,2,3,4])
dic = dict()
for k,v in res:
    dic[k] = v

print(dic)

生成器

生成器的本质就是迭代器,同时也不仅仅是迭代器,生成器提供了非常方便的自定义迭代器的途径

yield和return的区别

yield:接收值,凡是不会结束函数,然后继续下一行代码,直到return
return:返回值,直接结束函数,其他特性和yield一样

生成器表达式和列表推导式

把列表推导式的[]换成()就是生成器表达式
列表推导式相当于拿到一筐鸡蛋
生成器表达式相当于拿到一只母鸡,需要使用__next__方法可以拿到一个鸡蛋,优点是省内存,一次只产生一个值在内存中

递归

函数的递归是指在调用一个函数的时候,又直接或者间接的调用了他自生,函数的递归需要我们给出一个明确的结束条件

  1. 直接调用:直接在函数内部调用函数自身
  2. 间接调用:不在原函数体内调用函数自身,而是通过其他的方法间接调用函数自身

递归必须要有两个明确的阶段:

  1. 递推:一层一层递归调用下去,进入下一层递归的问题规模都将减小
  2. 回溯:递归必须要有一个明确的结束条件,在满足该条件开始一层一层回溯

猜你喜欢

转载自www.cnblogs.com/masterjian924/p/10970858.html