zoukankan      html  css  js  c++  java
  • python中的迭代器(iterable)和迭代对象(iterator), type和isinstance

    iterable:可迭代对象有 str,list,tuple,set,dic, range(),文件句柄

    判断可迭代对象方法:

    方法一

    s = 'abcdefg'
    # # 内部有__iter__方法的就是可迭代对象,遵循可迭代协议
    # print(dir(s))
    print('__iter__' in dir(s))     # Ture
    print('__next__' in dir(s))     # False
    
    li = [1, 2, 3, 4]
    print('__iter__' in dir(li))    # Ture
    print('__next__' in dir(li))    # False
    
    t = (1, 2, 3, 4)
    print('__iter__' in dir(t))     # Ture
    print('__next__' in dir(t))     # False
    
    se = {1, 2, 3, 4}
    print('__iter__' in dir(se))     # Ture
    print('__next__' in dir(se))     # False
    
    dic = {'name': 'rock', 'age': 23, 'gender': 'male'}
    print('__iter__' in dir(dic))     # Ture
    print('__next__' in dir(dic))     # False
    
    
    # 把可迭代对象转化成迭代器
    s = 'abcdefg'
    # obj = s.__iter__()
    obj = iter(s)
    print(obj.__next__())   # 每次找到一个元素
    print(obj.__next__())
    # 内部既有__iter__又有__next__方法的就是迭代器
    print('__iter__' in dir(obj))
    print('__next__' in dir(obj))
    
    # 文件句柄时可迭代器
    f1 = open('1.txt', 'r', encoding='utf-8')
    print('__iter__' in dir(f1))     # Ture
    print('__next__' in dir(f1))     # Ture
    f1.close()

     方法二

    from collections import Iterable
    from collections import Iterator
    s = 'abcdefg'
    # obj = s.__iter__()
    obj = iter(s)
    
    print(isinstance(s, Iterator))      # False 判断是否是可迭代器
    print(isinstance(s, Iterable))      # True 判断是否是可迭代对象
    print(isinstance(obj, Iterator))    # True 判断是否是可迭代器
    print(isinstance(obj, Iterable))    # True 判断是否是可迭代对象

    迭代器的作用:

    1.节省内存,只记录第一个元素和下一个元素的地址,用完释放
    2、惰性机制,next一次访问一个
    3、一条路到黑,不走回头路
    s2 = [1, 2, 3, 4, 5]
    obj2 = iter(s2)
    print(next(obj2))
    print(next(obj2))

    isinstance和type的区别

    # type() isinstance()区别?
    # type()只是判断该对象的数据类型
    isinstance()    # 不仅可以判断该对象的数据类型,而且可以判断其他很多。
    s1 = 'abcd'
    print(isinstance(s1, str))
    print(type(s1))

     while模拟for循环

    # while 循环模拟for循环机制
    li = [i for i in range(20)]
    obj = iter(li)
    while 1:
        try:
            print(next(obj))
        except StopIteration:
            break
  • 相关阅读:
    网络请求Request
    HTML元素
    你所不知的 CSS ::before 和 ::after 伪元素用法
    DOM理解
    为什么你应该尝试全栈
    程序员菜鸟的常用网站
    前端零基础学习提纲
    JavaScript,调用函数的5种方法
    json数据转化及应用
    浅谈ajax中的GET和POST
  • 原文地址:https://www.cnblogs.com/chen55555/p/10209677.html
Copyright © 2011-2022 走看看