zoukankan      html  css  js  c++  java
  • python中的可迭代对象与迭代器

    可迭代协议:只要含有‘__iter__()’方法的数据类型都是可迭代的

    可迭代对象:列表,字符串,等。整数类型不可迭代

    特点:可迭代对象都可用for循环。

    检测某个变量/值是否为可迭代的方法:

    方法一:

    print('__iter__' in dir([]))
    print('__iter__' in dir(123))

    结果为:

    True

    False

    提示:dir()是python中查找某个数据类型的所有方法的内置方法。

    方法二:

    from collections import Iterable
    print(isinstance([],Iterable)) 
    print(isinstance(123,Iterable)) 

    使用内置函数检测

    迭代器:

    迭代器协议:含有'__iter_()','__next__()'方法的变量、值都是迭代器。

    迭代器都是可迭代对象,而可迭代对象一定不是迭代器。

    {'__next__', '__setstate__', '__length_hint__'}

    以上是迭代器中有而迭代对象没有的方法。

    l = [1,2,3,4]
    res1 = l.__iter__()
    res2 = l.__iter__()

    其中的res1,res2 都是迭代器

    print(res1.__next__())

    通过调用一次__next__()方法输出一次迭代器里的一个值,桶过多次调用输出全部值。

    迭代器的特点:

     节省内存      

     惰性运算

    只能取一次

    只能按照顺序取

    for循环与迭代器之间的关系:

    如果for循环对象不是迭代器,for会帮我们把这个非迭代器变成迭代器(通过内置的__iter__()方法)

    如果是迭代器,会帮我们执行next方法从迭代器中取值

    帮助处理异常,停止迭代。

           

  • 相关阅读:
    应用程序初次运行数据库配置小程序(Java版)
    (转) 移动站适配rel=alternate PC页和H5页适配标注
    (转)微信收货地址开发分享
    (转)PHP EOF(heredoc)的使用方法
    http-equiv是什么意思(转载)
    jQuery Ajax 实例 ($.ajax、$.post、$.get)
    JSON转string、JSON转Object
    php使用curl来获取远程图片
    include和require的区别
    (转)PHP获取随机数
  • 原文地址:https://www.cnblogs.com/Wj-Li/p/10864922.html
Copyright © 2011-2022 走看看