迭代器,可迭代对象,迭代器对象和生成器

1  迭代器

迭代的定义:迭代是一个重复的过程,不同于其他纯粹的重复,迭代的每一次结果都是基于上一次迭代的结果产生的。

迭代器就是一个可以进行迭代取值的工具

作用:给我们提供了一种不依赖索引取值的方式

补充:针对双下划线开头,双下滑线结尾的方法

推荐读:双下+方法名

2 可迭代对象

内置有__iter__方法的对象(列表,词典,元组,字符串,集合等)

3 迭代器对象

即内置有__iter__方法也内置有__next__方法的对象(文件,类等)

注意:迭代器对象一定是可迭代对象,但可迭代对象不一定是迭代器对象

可迭代对象转化为迭代器对象:

iter_d = d.__iter__()  # 后面可以跟多个__iter__方法 

迭代器对象取值必须使用__next__方法

注意:

迭代器对象无论执行多少次__iter__方法得到的还是迭代器对象本身

注意

4 for循环本质

for循环内部的本质
    1.将in后面的对象调用__iter__转换成迭代器对象
    2.调用__next__迭代取值
    3.内部有异常捕获StopIteration,当__next__报这个错 自动结束循环

5 迭代取值的优缺点:

优点
        1.不依赖于索引取值
        2.内存中永远只占一份空间,不会导致内存溢出

    缺点
        1.不能够获取指定的元素
        2.取完之后会报StopIteration错

6 生成器

用户自定义的迭代器,本质就是迭代器

def func():
    print(‘first‘)
    yield  666  # 函数内如果有yield关键字,那么加括号执行函数的时候并不会触发函数体代码的运行
    print(‘second‘)
    yield  777
    print(‘third‘)
    yield  888
    print(‘forth‘)
    yield
    yield
# yield后面跟的值就是调用迭代器__next__方法你能得到的值
# yield既可以返回一个值也可以返回多个值 并且多个值也是按照元组的形式返回
g = func()  # 生成器初始化:将函数变成迭代器

示例

# 自定义range生成器,range的功能基本上实现,但美中不足的是有一点小瑕疵无法解决,当传入的finish==0时,如果传入的start<=finish且step==-1时,结果就跟原来的range函数不一样
def func(start, finish, step):
    if step >= 1:
        while start < finish:
            yield start
            start += step
    else:
        while start > finish:
            yield start
            start += step

def my_range(start, finish=0, step=1):
    if finish == 0 and start > finish:
        res = func(finish, start, step)
        return res
    else:
        res = func(start, finish, step)
        return res

for i in my_range(1, 0, -1):
    print(i)

自定义range函数

原文地址:https://www.cnblogs.com/cmd61/p/11192495.html

时间: 2024-10-13 15:23:24

迭代器,可迭代对象,迭代器对象和生成器的相关文章

迭代器/可迭代对象/生成器

先上本文主题: 迭代器一定是可迭代对象,可迭代对象不一定是迭代器; 可迭代对象要满足什么条件才能使用 for 正确遍历; 生成器一定是迭代器. 如何判断是否是迭代器/可迭代对象 from collections.abc import Iterator,Iterable t = [] # 是否为迭代器 isinstance(t,Iterator) # 是否为可迭代对象 isinstance(t,Iterable) 可迭代对象 实现了__iter__魔法方法,就是可迭代对象. class Test:

python当中的 可迭代对象 迭代器

学习python有一段时间了,在学习过程中遇到很多难理解的东西,做一下总结,希望能对其他朋友有一些帮助. 完全是个人理解,难免有错,欢迎其他大神朋友们批评指正. 1 迭代 什么是迭代呢??我们可以这样理解,一个容器类型的数据,比如 列表[ ]  .元组 () 和 字典 { }, 我们可以把这样类型的数据放入for temp in [1,2,3] 当中,temp 被一次一次的赋值成为后面容器内数据,然后我们拿到temp进行一些想做的事情.那么for 循环中自动的帮我们把数据一次一次的取出来,可以理

迭代器&amp;可迭代对象

迭代器 能够被next调用, 并不断返回值的一个对象惰性排序, 一次只获取一个数据, (占用一个空间)迭代器可以遍历无限量的数据 特点: 1.惰性序列, 节省内存 2.遍历使用next, 方向不可逆 3.迭代器可以遍历无限量大的数据 1. 可迭代对象 1 # 判断是不是可迭代对象 2 # 使用dir(obj) 看是否实现__iter__ 3 setvar = {1, 2, 4, 5} 4 print('__iter__' in dir(setvar)) 5 6 7 """ 8

11.Python初窥门径(函数名,可迭代对象,迭代器)

Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3] 二.函数名的应用 函数名指向的是函数的内存地址,加上()就执行这个函数 def func(args): return args print(func) #

Python——迭代器&amp;可迭代对象

可迭代对象 什么是对象: Python中,一切皆对象.一个变量,一个列表,一个字符串,文件句柄,函数等等都可称为一个对象.一个对象就是一个实例,就是实实在在的东西. 什么是迭代 迭代就是一个重复的过程,但还不是单纯的重复,就像是父亲,自己,儿子,孙子的关系,都是复制,但结果是不一样的.还有使用的APP,微信,抖音等隔一段时间就会基于上一次做一些更新,那么这就是迭代. 结论: 可迭代对象从字面意思就是一个可以重复取值的实施在在的东西. 不可迭代的有: 在Python中,有很多可迭代对象,那么就说说

python开发函数进阶:可迭代的&amp;迭代器&amp;生成器

一,可迭代的&可迭代对象 1.一个一个的取值就是可迭代的   iterable#str list tuple set dict#可迭代的 --对应的标志 __iter__ 2.判断一个变量是不是一个可迭代的 # print('__iter__' in dir(list))# print('__iter__' in dir([1,2,3])) 3.可迭代协议--凡是可迭代的内部都有一个__iter__方法 二,迭代器 1.将可迭代的转化成迭代器 1 #!/usr/bin/env python 2

迭代器iter(db),db为实例化的类对象,类对象中没有__iter__,但有__getitem__

def main(): import visdom import time viz = visdom.Visdom() db = Pokemon('pokeman', 224, 'train') x,y = next(iter(db)) ## print('sample:',x.shape,y.shape,y) viz.image(x,win='sample_x',opts=dict(title='sample_x')) ##类 class Pokemon(Dataset): def __ini

数组、对象迭代器

前端的朋友应该都用过一些迭代器,比如jQuery中的$.each()或underscore中的_.each();今天我们就来自己实现一个简单的迭代器: 我们仿照一些JS库的接口风格:each(arrOrObj, function(){}) 1 var each = function(obj, fn){ 2 var len = obj.length,i = 0; 3 if( typeof(len) == 'undefined' ){ 4 //如果是对象 ,对象没有length属性 5 for( i

迭代与迭代器

迭代器推演 1. 一般函数 var func = function(){     console.log("func执行了");     return 123; } console.log(func());    //函数返回值123; console.log(func);  //返回的是func的地址 2. 传参函数 var func = function(a){ console.log("func执行了,收到参数:",a);     return 123; }

C++ Iterator迭代器介绍及Iterator迭代器用法代码举例

C++ Iterator迭代器介绍 迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针.举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历.有这么几种迭代器如下: 迭代器 描述 input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*). output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*). forward_iterator 可向前移动的,同时具有读写功能的迭代器.同