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方法从迭代器中取值

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

           

  • 相关阅读:
    ant build打包
    在JAVA中如何获取当前源文件名以及代码的行号
    react以组件为中心的代码分割和懒加载
    java中针对 try和finally一些总结
    JS强制关闭浏览器页签并且不提示关闭信息
    由[].slice.call()引发的思考
    JS类型判断
    nginx的location配置
    DBCP连接池
    java/Servlet
  • 原文地址:https://www.cnblogs.com/Wj-Li/p/10864922.html
Copyright © 2011-2022 走看看