python之迭代器、生成器与面向过程编程

目录


一、迭代器

1.迭代器的概念理解

'''
迭代器从字面上理解就是迭代的工具。而迭代是每次的开始都是基于上一次的结果,不是周而复始的,而是不断发展的。
'''
l=[1,2,3,4]

count=0
while count<len(l):
    print(l[count])
    count+=1

2.可迭代对象与迭代器对象

'''
(1)可迭代对象:
        可迭代对象就是内置__iter__方法的对象(再次重申,python中一切皆对象)。
(2)迭代器对象就是内置有__iter__方法和__next__方法的对象。

可迭代对象执行了obj.__iter__()得到的结果就是迭代器对象,迭代器对象执行了obj.__iter__()得到的是迭代器本身。

要明确的一点是迭代器对象一定是可迭代对象,但是可迭代对象不一定是迭代器对象。
'''
#字符串
string='hello world'
iter_st=string.__iter__()
while True:
    try:
        print(iter_st.__next__())
    except StopIteration:
        break

#列表
s=[1,3,4,5,'a']
iter_s=s.__iter__()
while True:
    try:
        print(iter_s.__next__())
    except StopIteration:
        break

#字典
dic={'a':1,'b':2}
iter_dic=dic.__iter__()
while True:
    try:
        print(iter_dic.__next__())
    except StopIteration:
        break

#集合
l={1,2,3,4,5}
iter_l=l.__iter__()
while True:
    try:
        print(iter_l.__next__())
    except StopIteration:
        break
实例说明

3.迭代器的优缺点:

'''
优点:
    1.提供了一种不依靠索引取值的迭代方式
    2.执行一次.__next__()方法往内存读一条数据,节省内存

缺点:
    1.无法用len(),甚至在数据读完之前都不会知道数据有多少
    2.只能往后走,不能回退
    3.一次性的
'''

补充for循环

with open('db.txt','r',encoding='utf-8') as f:
    for line in f:
        print(line)

#执行in后的iter_f=f.__iter__()方法得到迭代器对象
#执行iter_f.__next__(),将得到的值赋值给line,执行循环体代码
#重复第二步,直到程序抛出StopIteration异常,结束循环

二、生成器

'''
生成器就是迭代器。
当函数体内有yield时,那么函数名()的结果就是生成器,yield不会执行函数体代码而是保存函数的运行状态。
'''
def chicken():
    print('>>>1')
    yield 1
    print('>>>2')
    yield 2

obj=chicken()#拿到生成器对象
print(obj)#<generator object chicken at 0x000001B3FD8580A0>

res=obj.__next__()#执行第一行,返回>>>1
print(res)#1

res2=obj.__next__()
print(res2)
res3=obj.__next__()#StopIteration
def eat(name):
    print('%s  ready to eat'%name)
    while True:
        food=yield
        print('%s start to eat %s'%(name,food))

name=input('投喂对象>>>').strip()
obj=eat(name)
obj.__next__()
food=input('食物>>>').strip()
obj.send(food)
喂狗小程序
def is_range(start,stop,step=1):
    n=start
    while n<stop:
        yield n
        n+=step

for i in is_range(10):
    print(i)

#小改动
def my_range(start=0,stop=1,step=1):
    n=start
    while n<stop:
        yield n
        n+=step

for i in my_range(2,10,2):
    print(i)
自制迭代器

三、面向过程编程

'''
不同的编程范式像不同的武林门派。
面向过程的编程思想:
    核心就是‘过程’二字,即解决问题的过程
    面向过程编程就好比设计一条流水线,是种机械式的思维方式。

优点:复杂问题流程化、简单化
缺点:扩展性差,连锁反应
应用:用于扩展性要求低的场景
'''
原文地址:https://www.cnblogs.com/qiaoqianshitou/p/8687866.html