迭代器和生成器

1、迭代器
可迭代的对象:
但凡内置有__iter__方法的对象都是可迭代的对象,除数字外,其他类型都是可迭代对象

迭代器对象:
调用可迭代对象的__iter__方法得到的就是内置的迭代器对象
特点:既内置有__iter__方法,又内置有__next__方法
执行迭代器对象的__iter__得到的仍然是迭代器本身
执行迭代器对象的__next__得到的迭代器的下一个值
for item in 可迭代的对象:
pass
for循环原理:
1,for循环称之为迭代器循环,in后面跟的必须是可迭代的对象
2,for循环会执行in后对象的_iter_方法,拿到迭代器对象
3,然后调用迭代器对象的_next_方法,拿到一个返回值赋值给_iter_,执行一次循环体
4,周而复始,直到取值完毕,for循环会监测到异常自动结束循环

优点:
1、提供了一种不依赖索引的取值方式
2、同一时刻在内存中只存在一个值,更节省内存

缺点:
1、取值麻烦
2、只能往后取,一次性的,取完就抛出一次StopIteration

2、生成器
函数内有yield关键字,再调用函数就不会立刻执行函数体代码,会
得到一个返回值,该返回值就是生成器,生成器本质就是迭代器
def func():
print('1111')
yield 1
print('2222')
yield 2
print('3333')
yield 3
print('4444')

gen=func()
v1=gen.__next__() # 此时才会触发函数的执行
v2=gen.__next__()
v3=gen.__next__()
v4=gen.__next__()

yield功能:
1、提供了一种自定义迭代器的方式
2、yield可以返回多次值


3、面向过程编程
1、什么是面向过程编程:
核心是”过程“二字,过程指的是解决问题的步骤
即先干什么,再干什么
基于该思想编写程序就好比在设计一条流水线,是一种
机械式的思维方式
2、优点:
复杂的问题流程化、进而简单化

3、缺点:
扩展性差



posted @ 2018-04-02 18:49  鲁之敬  阅读(82)  评论(0编辑  收藏  举报