迭代器
迭代的工具,迭代是一个重复的过程,并且每次重复都是基于上一次结果而来
什么是可迭代的对象和迭代器对象?
在python中,但凡内置有__iter__方法的对象,都是可迭代对象
可迭代对象执行__iter__方法的到的返回值就是迭代器对象
l=‘hello‘
iter_l=l_iter_()
while True:
try:
print(iter_l._next_())
except StopIteration:
break
迭代器对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代器
特点:内置有__next__方法,执行该方法会拿到迭代器对象中的一个值,内置__iter__方法,执行该方法会拿到迭代器本身
文件对象本身就是迭代器对象
for循环被称为迭代器循环,in后跟的必须是可迭代的对象
l=‘hello‘
for iter in l:
print(iter)
迭代器的优点:1.提供了一种可以不依赖索引的取值方式
2.迭代器更加节省空间(因为它像一个老母鸡 用一个给你下一个蛋)
缺点:取值麻烦而且只能取一个个值,只能往后取,并且是一次性的无法用len获取长度
生成器
生成器本身就是迭代器
函数内只要包含有yield的关键字,在调用函数,就不会执行函数体代码,拿到的返回值就是一个生成器对象
总结yield:为我们提供了一种自定义迭代器的方式,用以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器yield可以像return一样用于返回值,区别是return只能返回一次值,而yield可返回多次因为yield可以保存函数执行的状态
def eat(name):
print(‘%sready to eat‘%name)
while True:
food=yield
print(‘%s start to eat %s‘%(name,food))
dog1=eat(‘alex‘)
1.必须初始化一次,让函数停在yield的位置
dog.__next__()
2.接下来的事,就是喂狗
send有两方面的功能
(1)给yield传值
(2)同__next__的功能
dog1.send(‘泔水‘)
面向过程编程
核心是‘过程’两个字,过程即解决问题的步骤。即先干什么,再干什么~~~
基于面向过程写程序就好比在设计一条流水线,是一种机械式的思维方式
优点:复杂问题流程化,进而简单化
缺点:修改一个阶段,其他阶段都有可能需要做出修改牵一发而动全身,即扩展性极差应用
应用于扩展性要求低的场景