python函数(迭代器,生成器)

迭代器

索引:1 = [1,2,3]

for循环:for i in l:

      i

print(dir([]))告诉列表拥有的所有方法

只要是能被for循环的数据类型 就一定拥有__iter__方法
print([].__iter__())
一个列表执行了__iter__()之后的返回值就是一个迭代器

print(dir([]))
print(dir([].__iter__()))
print(set(dir([].__iter__())) - set(dir([])))

Iterable 可迭代的 -- > __iter__ #只要含有__iter__方法的都是可迭代的
[].__iter__() 迭代器 -- > __next__ #通过next就可以从迭代器中一个一个的取值

只要含有__iter__方法的都是可迭代的 —— 可迭代协议

迭代器的概念
迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器

迭代器协议和可迭代协议:
  可以被for循环的都是可迭代的
  可迭代的内部都有__iter__方法
  只要是迭代器 一定可迭代
  可迭代的.__iter__()方法就可以得到一个迭代器
  迭代器中的__next__()方法可以一个一个的获取值

for循环其实就是在使用迭代器
iterator
可迭代对象
直接给你内存地址

print([].__iter__())
print(range(10))

for
只有 是可迭代对象的时候 才能用for
当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代

for i in l:
    pass
iterator = l.__iter__()
iterator.__next__()

迭代器的好处:
  从容器类型中一个一个的取值,会把所有的值都取到。
  节省内存空间
  迭代器并不会在内存中再占用一大块内存,
  而是随着循环 每次生成一个
  每次next每次给我一个

生成器

生成器 —— 迭代器

def generator():
    print(1)
    return ‘a‘

ret = generator()
print(ret)

生成器函数 —— 本质上就是我们自己写得函数
生成器表达式

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

for i in l:
    print(i)

只要含有yield关键字的函数都是生成器函数
yield不能和return共用且需要写在函数内

def generator():
print(1)
yield ‘a‘

#生成器函数 : 执行之后会得到一个生成器作为返回值

ret = generator()
print(ret)
print(ret.__next__())

原文地址:https://www.cnblogs.com/chenshuaiv587/p/8178633.html

时间: 2025-01-13 05:59:01

python函数(迭代器,生成器)的相关文章

python 【迭代器 生成器 列表推导式】

python [迭代器  生成器  列表推导式] 一.迭代器 1.迭代器如何从列表.字典中取值的 index索引 ,key for循环凡是可以使用for循环取值的都是可迭代的可迭代协议 :内部含有__iter__方法的都是可迭代的迭代器协议 :内部含有__iter__方法和__next__方法的都是迭代器 print(dir([1,2,3])) lst_iter = [1,2,3].__iter__() print(lst_iter.__next__()) print(lst_iter.__ne

python函数-迭代器和生成器

一 迭代器 1.1 认识迭代器 什么是迭代 什么是迭代器 迭代器 如何从列表.字典中取值的 index索引 ,key for循环 凡是可以使用for循环取值的都是可迭代的 可迭代协议 :内部含有__iter__方法的都是可迭代的 迭代器协议 :内部含有__iter__方法和__next__方法的都是迭代器 一个生成器 只能取一次生成器在不找它要值的时候始终不执行当他执行的时候,要以执行时候的所有变量值为准 l = [1,2,3] while True: lst = l.__iter__() ##

python之迭代器生成器和内置函数,匿名函数

今天学习了迭代器生成器以及内置函数和匿名函数,说实话有些懵圈,有些难度了. 一.迭代器和生成器 1.如何从列表.字典中取值的: index索引 for循环 凡是可以使用for循环取值的都是可迭代的 (1)可迭代协议:内部含有__iter__方法的都是可迭代的 (2)迭代器协议:内部含有__iter__方法和__next__方法的都是迭代器 什么是可迭代的:内部含有__iter__方法的都是可迭代的 什么是迭代器:迭代器=iter(可迭代的),自带一个__next__方法 可迭代最大的优势:节省内

函数---迭代器&生成器&列表解析&三元表达式

可迭代对象:obj.__iter__ 迭代器:iter1=obj.__iter() 1iter1.__next__ 2iter2.__next__ 迭代器: 优点:不依赖索引 惰性计算,节省内存 缺点: 不如按照索引的取值方便 一次性,只能往后取,不能回退 迭代器的应用: 提供了一种不依赖索引的统一的迭代方法 惰性计算,比如取文件的每一行 判断可是否是可迭代对象和迭代器 from collections import Iterable, Iterator # 导入模块功能 isinstance(

Python函数(十一)-生成器

首先看一下什么是列表生成式 >>> [i*2 for i in range(10)] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] >>> a=[] >>> for i in range(10): ... a.append(i*2) ... >>> a [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 这一句代码就实现了三句代码的效果,这一句代码就是列表生成式 列表如果存的数据太多,就会

(1-6)python函数_生成器

理解: 我们先用一个通俗的比方来了解下生成器,去饭店吃饭时,我们点了菜单,厨师不是一次性把菜都上齐,而是一个个菜上.这里的厨师就是一个生成器对象.生成器是python一大特性,python使用生成器对延迟操作提供支持,只在都要好好的时候才产生结果,而不是立 即产生结果. 1.生成器函数:常规函数定义,使用yield语句而不是return语句返回结果,yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行 2.生成器表达式:类似于列表,但是,生成器返回按需产

Python函数-5 生成器

生成器 有时候,序列或集合内的元素的个数非常巨大,如果全制造出来并放入内存,对计算机的压力是非常大的.比如,假设需要获取一个10**20次方如此巨大的数据序列,把每一个数都生成出来,并放在一个内存的列表内,这是粗暴的方式,有如此大的内存么?如果元素可以按照某种算法推算出来,需要就计算到哪个,就可以在循环的过程中不断推算出后续的元素,而不必创建完整的元素集合,从而节省大量的空间.在Python中,这种一边循环一边计算出元素的机制,称为生成器:generator. 生成生成器: g = (x * x

【Python】 迭代器&生成器

迭代器 任何一个类,只要其实现了__iter__方法,就算是一个可迭代对象.可迭代对象的__iter__方法返回的对象是迭代器,迭代器类需要实现next方法.一般来说,实现了__iter__方法的类肯定还会顺便实现next方法,也就是说这个类既是一个可迭代对象也是个迭代器. 一个迭代器ite可用ite.next()方法来返回其定义好的以某种算法找到的下一个元素,内建的iter(...)函数可把可迭代对象转化为迭代器.最常见的利用可迭代对象和迭代器的就是for语句了: for item in it

python函数、装饰器、迭代器、生成器

5月21日,请假结婚,然后性格惰性来了,不怎么想看视频和笔记,性格中的弱点开始出现,开始做的不错,渐渐开始松懈,直至放弃--- 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递,它的应用形式也被称为高阶函数,函数的特性如下: a. 可以被引用 1 # def foo(): 2 # print('from foo') 3 # 4 # func = foo