精华内容
下载资源
问答
  • 字符串是可迭代对象,是序列中的有序序列,即可迭代对象就是有序序列。无序序列(无序的对象)比如字典类型也可用for循环 for item in'我想上青天': print(item) test=12345 for k in test: print(k) #...

    for 变量名 in 序列

    字符串是可迭代对象,是序列中的有序序列,即可迭代对象就是有序序列。无序序列(无序的对象)比如字典类型也可用for循环

    for item in'我想上青天':
      print(item)
    test=12345
    for k in test:
        print(k)    #数字类型的话报错
    for k in range(1,6):
        print(k)    
    test=12345
    test=str(test)  #先把数字类型转化为字符串类型
    for k in test:
      print(k)
     
      

     

     

     

    转载于:https://www.cnblogs.com/ss-lu/p/9910175.html

    展开全文
  • 迭代器协议:必须实现__next__()方法,...可迭代对象:列表,字典,元素,字符串等,但可迭代对象一定是迭代器 from collections import Iterable, Iterator a = [1, 2, 3] isinstance(a, Iterable) # True isinsta
  • 可迭代对象:可以使用for循环遍历的对象,我们称之为可迭代对象.迭代器:提供数据和记录位置.生成器:如果函数中有yield我们称之为生成器如果在同一时间执行多个任务我们可以使用多进程和多线程,如果你想使用一个线程或...
    迭代:python中可以用for循环使用取值操作过程.
    
    可迭代对象:可以使用for循环遍历的对象,我们称之为可迭代对象.
    迭代器:提供数据和记录位置.
    生成器:如果函数中有yield我们称之为生成器
    如果在同一时间执行多个任务我们可以使用多进程和多线程,如果你想使用一个线程或进程然后让多个任务一次执行按顺序执行一个线程或者一个进程.  如果你在一个线程内部,想使用让多个任务交替执行,那么可以使用协程
    gevent特点:是在执行一个耗时操作后才会变交替执行,内部有个gevent.sleep()    打补丁:from  gevent import monkey     monkey.patch_all().    gevent才知道那些事耗时操作time.sleep()如果不写gevent就会一次执行\ 主线程等待...
    展开全文
  • 1、可迭代对象 Set Map String Array Arguments NodeList 1.1 判断是否拥有可迭代能力 当一个数据具备Symbol.iterator属性的时候,才可以用for...of进行迭代。 console.log(Array.prototype.hasOwnProperty...

    1、可迭代对象

    • Set
    • Map
    • String
    • Array
    • Arguments
    • NodeList

    1.1 判断是否拥有可迭代能力

    • 当一个数据具备Symbol.iterator属性的时候,才可以用for...of进行迭代。
    console.log(Array.prototype.hasOwnProperty(Symbol.iterator));
    console.log(Set.prototype.hasOwnProperty(Symbol.iterator));
    
    • 测试
      在这里插入图片描述
    • 结论
      Array.prototype[Symbol.iterator]是一个函数,执行完函数返回的一个对象,对象拥有next方法。

    1.2 手动实现迭代器

    const createIterator = items => {
      const keys = Object.keys(items);
      const len = keys.length;
      let pointer = 0; // 当前的指针位置
      return {
        next() {
          const done = pointer >= len;
          const value = !done ? items[keys[pointer++]] : undefined; // 如果当前指针位置小于总长度
          return {
            value,
            done
          }
        }
      }
    }
    
    • 测试数组
    let list = [1,2,3,4];
    let listIterator = createIterator(list);
    listIterator.next()
    listIterator.next()
    listIterator.next()
    listIterator.next()
    listIterator.next()
    // logout
    { value: 1, done: false }
    { value: 2, done: false }
    { value: 3, done: false }
    { value: 4, done: false }
    { value: undefined, done: true }
    
    • 测试对象
    let obj = {name:'小李',id:'123'};
    let objIterator = createIterator(obj);
    objIterator.next()
    objIterator.next()
    objIterator.next()
    // logout
    { value: '小李', done: false }
    { value: '123', done: false }
    { value: undefined, done: true }
    

    1.3 为什么数据是可迭代对象,却不能使用next()

    可迭代对象不是迭代器,迭代器才有next()方法。

    1.4 将不可迭代的数据转换可迭代数据

    1. 尝试使用for...of
      在这里插入图片描述
    2. 直接修改对象原型属性

    开发中,不会直接去修改原型。

    Object.prototype[Symbol.iterator] = function() {
      const self = this;
      const keys = Object.keys(self);
      const len = keys.length;
      let pointer = 0;
      return {
        next() {
          const done = pointer >= len;
          const value = !done ? self[keys[pointer++]]: undefined;
          return {
            done,
            value
          }
        }
      }
    }
    let obj = {name: '小李', gender: '男'};
    let objItem = obj[Symbol.iterator]();
    console.log(objItem.next());
    for (const item of obj) {
      console.log(item)
    }
    

    2、Array.prototype.keys()

    • 索引迭代器会包含那些没有对应元素的索引
    var arr = ["a", , "c"];
    var sparseKeys = Object.keys(arr);
    var denseKeys = [...arr.keys()];
    console.log(sparseKeys); // ['0', '2']
    console.log(denseKeys);  // [0, 1, 2]
    

    3、Array.prototype.values()

    • values() 方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。
    const array1 = ['a', 'b', 'c'];
    const iterator = array1.values();
    for (const value of iterator) {
      console.log(value);
    } // a b c
    

    Array.prototype.valuesArray.prototype[Symbol.iterator] 的默认实现。

    • 一次性:数组迭代器是一次性的,或者说临时对象
    var arr = ['a', 'b', 'c', 'd'];
     var iterator = arr.values();
     for (let letter of iterator) {
     console.log(letter); 
    } //"a" "b" "c" "d"
    for (let letter of iterator) {
    console.log(letter);
    } // undefined
    

    4、Array.prototype.entries()

    entries()方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。

    const array1 = ['a', 'b', 'c'];
    
    const iterator1 = array1.entries();
    
    console.log(iterator1.next().value);
    // expected output: Array [0, "a"]
    
    console.log(iterator1.next().value);
    // expected output: Array [1, "b"]
    

    参考

    展开全文
  • dict_one = {'name': 'zxf', 'age': 24, 'address': '...# 字典本身是以key来迭代的 # 迭代key for key in dict_one: print(key) print('*'*50) # 迭代value for key in dict_one: print(dict_one[key]) print(...

    迭代

    可以理解为,任意的集合使用for循环遍历

    索引迭代

    python中,迭代永远是取出元素本身,而非元素的索引。

    对于有序集合,有时候会需要取出元素的索引,可以使用python内置的enumerate函数。

    enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身。

    list_one = ['a','b','c']
    for i in enumerate(list_one):
        print(i)   # 打印(0,'a') (1,'b') (2,'c')
        print(type(i)) # 类型是tuple
        print(i[0])  # 打印list的下标0 1 2

    字典迭代

    字典本身是以key来迭代的

    dict_one = {'name': 'zxf', 'age': 24, 'address': 'ZheJiang'}  
    
    # 迭代key
    for key in dict_one:
        print(key)

    迭代字典对象的value值可以使用values()/itervalues()方法。

    # 迭代value
    for key in dict_one:
        print(dict_one[key])
    print('*'*20)
    for value in dict_one.values():
        print(value)

    两者效果相同,实际工作原理会有些不同。values()方法实际上是把一个dict转换成了包含value的list了;而itervalues()方法不会进行转换,它会在迭代的过程中一次从dict中取出value,所以itervalues()方法比values()方法节省了生成list所需的内存。

    迭代字典的key和value使用items()/iteritems()方法。

    # 迭代key和value
    for key,value in dict_one.items():
        print(key,value)

    如何判断一个对象是可迭代对象?

    通过collections模块的Iterable类型来判断

    from collections import Iterable
    print(isinstance('abc',Iterable)) # str是否可迭代  True
    print(isinstance(5,Iterable)) # 整数是否可迭代  False
    print(isinstance('5',Iterable)) # str是否可迭代(区分上面的整数)  True
    展开全文
  • 可迭代对象进行for循环

    千次阅读 2018-03-16 20:30:59
    一:for循环的定义 for循环是对可迭代对象进行迭代的过程。 看到这个定义,很多萌新肯定会问了:到底什么是迭代,什么是可迭代对象呢?首先,迭代就是从可迭代对象逐个读取元素,直到可迭代对象中的元素都被读取...
  • python 可迭代与不可迭代

    千次阅读 2019-07-12 11:45:00
    python 可迭代与不可迭代 # 可迭代: # 可迭代对象就是一个可以重复取值的实实在在的东西 # 但凡内部含有__iter__方法的对象,都是可迭代对象 直接输出:(可迭代) str list tuple 键:(可迭代) dict # 不可迭代 索引...
  • 如何判断一个对象是否可迭代

    千次阅读 2019-03-23 08:57:17
    答:可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator注意,列表不是可迭代对象,生成器是迭代器,迭代器一定是生成器即:生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是...
  • Python中可迭代对象是什么?

    万次阅读 多人点赞 2019-06-30 22:59:56
    Python中可迭代对象(Iterable)并是指某种具体的数据类型,它是指存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问。 __iter__方法的作用是让对象可以用for … in循环...
  • JavaScript 可迭代对象

    千次阅读 2020-07-16 12:22:57
    Javascript 可迭代对象 小插曲 我之前学到了对象与数组进行拼接,如果对象加 [Symbol.isConcatSpreadable]:true,对象不会当作数组处理,反之,对象的元素将会像数组中的元素一样,被复制进数组中。 正题 可迭代...
  • 一文读懂Python可迭代对象、迭代器和生成器

    万次阅读 多人点赞 2018-05-08 22:30:33
    解释器需要迭代对象 x 时,会自动调用 iter(x)。内置的 iter 函数有以下作用:(1) 检查对象是否实现了 iter 方法,如果实现了就调用它,获取一个迭代器。 (2) 如果没有实现 iter 方法,但是实现了 getitem ...
  • 关于可迭代对象和迭代器的关系和构建一直理解的都太深入,今天就自己来深刻扒一扒他们之间的关系! 可迭代对象(iterable): python中的可迭代对象包括list, dict, tuple, str, 用dir()函数查看他们的对象方法都会发现...
  • Python可迭代对象,迭代器,生成器的区别

    万次阅读 多人点赞 2017-05-16 12:39:57
    本篇文章简单谈谈Python中可迭代对象,迭代器和生成器之间的关系。刚开始我认为这两者是等同的,但后来发现并是这样;直接抛出结论: 可迭代对象包含迭代器。 如果一个对象拥有__iter__方法,其是可迭代对象;如果...
  • 在es6中新增了一个概念:迭代器Iterator,。Iterator是一种接口,为不同的数据结构提供统一的访问机制。不管是什么数据类型,只要部署了Iterator接口(一个数据结构只要部署了Symbol.iterator属性,就被视为具有 ...
  • 生成器、迭代器、可迭代对象的联系和区别可迭代对象定义判断迭代器概念判断生成器概念yield关键字实例①:实例②:yield生成器实现斐波那契数列实例③:send()方法修改生成器的状态三者的联系与区别: 可迭代对象 ...
  • 今天准备写一写在学习python过程中,自己对于迭代器、迭代器协议以及可迭代对象之间的关系及自己的理解。可能有些不对的地方,欢迎大家及时指正。 可迭代对象 可迭代对象泛指一类对象,不是指的每一种对象,确切的说...
  • 文章目录可迭代对象可迭代对象定义②查看对象内部方法③总结迭代器①迭代器的定义②如何判断该对象是否是迭代器③可迭代对象如何转化成迭代器④迭代器取值⑤while模拟for的内部循环机制⑥小结可迭代对象与迭代器...
  • 注意迭代的数据类型——Python

    千次阅读 2019-10-25 23:12:55
    有些数据类型无法迭代,有时候会没注意到,例如float和int。 这种情况很明显能发现问题,不过有时问题会比较隐蔽一点。 ...例如无法迭代的数据类型...当然为了演示方便,直接把series中不可迭代的数据展示出来...
  • ES6可迭代对象与迭代器的理解

    千次阅读 2018-12-29 17:42:47
    一、本文解决的问题 ES6中新增了一个语法for...of语句,可能很多前端工程师...二、可迭代对象 如果学过python就知道,python中有可迭代对象及迭代器之分 1、可迭代对象有 1.Array 2.String 3.Map 4.Set 5.argume...
  • 协议是一种约定,可迭代对象实现迭代器协议,Python的内置工具(如for循环,sum,min,max函数等)通过迭代器协议访问对象,因此,for循环并需要知道对象具体是什么,只需要知道对象能够实现迭代器协议即可。...
  • python中的可迭代对象

    万次阅读 多人点赞 2017-08-03 22:58:28
    可迭代对象 我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语法从 其中依次拿到数据进⾏使⽤,我们把这样的过程称为遍历,也叫迭代。 但是,是否所有的数据类型都可以放到for..
  • 可迭代对象详解

    2019-08-12 17:33:23
    1.可迭代对象 我们已经知道可以对list、tuple、dict、set、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。 把可以通过for...in...这类语句迭代读取...
  • 可迭代对象 我们已经知道可以对list、tuple、str等类型的数据使用for…in…的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。 但是,是否所有的数据类型都可以放到for…in…的语句中,...
  • 可迭代的/可迭代对象

    2018-11-05 20:32:58
    可迭代的/可迭代对象 for i in 7:print(i) iterable 可迭代 整数类型 是不可迭代的 iter 迭代 iterable 可迭代的 dir函数查看一个数据类型内部含有哪些方法 两边带着双下划线的方法叫做"魔术方法",“双下...
  • 最近学习了python中的生成器、迭代器、可迭代对象的知识,现在回顾一下,巩固理解 先说一下列表生成式: 执行结果如下: 通过方括号加入里面的表达式,从而生成一个列表,在这里注意一下,列表生成时也可以...
  • 生成器 采用惰性触发 是迭代器的一种 列表生成式 只要一执行就生成全部的元素 生成器只有触发时才生成一个,相当于游标一直向下移动,直到stopIteration def num(min,max): for i in range(min,max): yield i #...
  • 第四章 基础知识进阶第十七节 迭代、可迭代对象、迭代器 一、 引言 本来计划讲完元组和字典后就讲列表解析和字典解析,但要理解列表解析和字典解析,就需要掌握Python的高级的类型迭代器,因此本节将迭代器的概念先...
  • 生成器,可迭代对象,迭代器之间区别 对于初学者肯定会带来困惑,希望下面的文章能帮助你,彻底理解, 迭代器理解 迭代器作用 可迭代对象,迭代器区别 实现的方式 下面用 用一幅图来概括: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 391,898
精华内容 156,759
关键字:

不可迭代对象