python之路--迭代器和生成器

迭代:

  迭代器协议: 

  1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)

  2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)

  3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象

  for循环实现迭代的原理

  1.调用__iter__()方法,将后面序列转为可迭代对象

  2.调用__next__方法,读取内容,读取到StopIteration异常,以终止迭代。

name=[1,2,3,4,5]
for i in name:
    print(i)

实现for循环的原理 :
name=name.__iter__()
while True:
    try:
        print(name.__next__())
    except StopIteration:
        break

生成器(优点:节省内存):

  生成器:可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象。

  生成器分类及在python中的表现形式:(Python有两种不同的方式提供生成器)

  1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

  2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

#函数表达式
a=(i for i in range(100))
print(a)
print(a.__next__())
# 函数表达式
def generator_test():
    yield 1
    yield 2
    yield 3

b=generator_test()
print(b)
print(b.__next__())
print(b.__next__())
print(b.__next__())
print(b.__next__())

  

生成器小结:

  1.是可迭代对象

  2.实现了延迟计算,省内存啊

  3.生成器本质和其他的数据类型一样,都是实现了迭代器协议,只不过生成器附加了一个延迟计算省内存的好处,其余的可迭代对象可没有这点好处,记住喽!!!

触发函数生成器的方法:

  1.__next__

  2.next()

  3.send()  #send会将参数赋值给yield

参考链接:https://www.cnblogs.com/linhaifeng/p/6133014.html

时间: 2024-10-12 21:06:16

python之路--迭代器和生成器的相关文章

Python之路——迭代器与生成器

一.迭代器 1 # -*- encoding:utf-8 -*- 2 3 4 # dir([1,2].__iter__())是列表迭代器中实现的所有方法,dir([1,2])是列表中实现的所有方法 5 # print(dir([1,2].__iter__())) 6 # print(dir([1,2])) 7 # print(set(dir([1,2].__iter__()))-set(dir([1,2]))) # {'__length_hint__', '__setstate__', '__n

python函数:迭代器和生成器

python函数:迭代器和生成器 迭代器和生成器是函数中的一大重点,务必掌握,何为迭代?何为迭代器? 预习: 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕(使用生成器) 一.迭代器 for i in 50:     print(i) #运行结果: # Traceback (most recent call last): #   File "G:/python/python代码/八月/day2 迭代器生成器/3迭代器.py", line 8, in &

Python高手之路【九】python基础之迭代器与生成器

迭代器与生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一

python控制结构、迭代器和生成器(个人笔记)

参考:https://docs.python.org/2.7/reference/compound_stmts.html#whilehttps://www.cnblogs.com/lclq/p/5586198.html (python的运算与表达式)https://www.zhihu.com/question/20829330 (python的迭代器)https://www.cnblogs.com/devin-guwz/p/5738676.html(python入门例题) python中的真假:

1.17 Python基础知识 - 迭代器和生成器初识

可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] #输出结果 [0,1,4,9,16,25,36,49,64,81] 生成器表达式:可以简便快捷地返回一个生成器.生成器表达式的语法和列表解析式基本一样,只不过是将[]替换成() 生成器的数据只有在调用时才生成 示例代码: a = ( i ** 2 for i in range(10)) print

python 基础之迭代器与生成器

迭代器和生成器 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大有点是不要求先准备好整个迭代过程中所有的元素.迭代器仅仅在跌带到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大或者无限的集合. 特点 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的

Python成长之路【第五篇】:Python基础之迭代器和生成器

一.递归和迭代 递归就是调用自身 迭代就是每次迭代都是依赖于上次结果 二.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stopiteration异常,以终止迭代(只能往后走,不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具(如for循环,sum,min,max等函数)都是使用迭代器协议访问对象 三

Python学习之路--迭代器,生成器

迭代器 # 双下方法# print([1].__add__([2]))# print([1]+[2]) # 迭代器# l = [1,2,3]# 索引# 循环 for# for i in l:# i## for k in dic:# pass # list# dic# str# set# tuple# f = open()# range()# enumerate# print(dir([])) #告诉我列表拥有的所有方法# ret = set(dir([]))&set(dir({}))&se

python基础:迭代器、生成器(yield)详细解读

1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 1.1 使用迭代器的优点 对于原生支持随机访问的数据结构(如tuple.list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值(可以使用内建函数enumerate()找回这个索引值).但对于无法随机访问的数据结构(比如set)而言,迭代器是唯一的访问元素的方式. 另外,迭代器的一大优点是不要求事