小白学python-----迭代器,生成器,面向过程

一.迭代器

1.什么是迭代

迭代就是一个重复的过程,每一次迭代的结果是下一次迭代的初始值

2.可迭代对象

可以使用内置__iter__方法的就是可迭代对象

如:字符串,列表,字典,元组,集合,文件

3.迭代器对象

可迭代对象执行__iter__得到的结果就是迭代器对象

迭代器对象可以使用__next__内置方法和 __iter__内置方法

使用__iter__内置方法得到的还是其本身

文件是迭代器对象

4.迭代器对象是可迭代对象,可迭代对象不一定是迭代器对象

补充知识抛出异常简单使用方法及for循环底层原理

l=[1,2,3,4,5,6,7]
iter_l=l.__iter__()
while 1:
    try: 检查异常
        k=next(iter_l)
        print(l[k])
    except StopIteration:
        break


for循环底层原理

for i in l:
每次都是执行l.__iter__(),得到一个迭代器对象iter_l
然后执行next(iter_l),将得到的值赋值给i,然后继续执行
直到捕捉异常,结束循环
    print(i)

5.迭代器的优缺点

优点:节省内存,每次都是循环取出一个值

        提供一种统一的,不依赖索引的取值方式

缺点:无法获取长度(len)

        一次性的,只能往后走,无法往前退


二.生成器

函数内包含yield关键字,那么该函数名+()得到的结果就是生成器,并且不会执行其内部代码

生成器就是迭代器,可以使用迭代器方法

def foo():
    print('part1')
    yield 1
    print('part2')
    yield 2
    print('part3')
    yield 3

x = foo()
res=next(x)
print(res)
res.__iter__()
print(res.__next__())

总结:

在函数内可以用多个yield,当执行函数代码时,遇到yield就会停止运行

当下一次执行该函数时,会从停止的地方继续向下执行,直到遇到下一个yield停止运行,直到执行结束

并且yield后面可以跟返回值

可以使用send()方法给yield传值

三.面向过程编程思想

1.过程就是解决问题的步骤,先干什么再干什么,是一种机械式的编程

优点:将复杂的问题流程化,简单化

缺点:可拓展性极差

应用:拓展性要求不高的场景

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/81329891