Skip to main content
 首页 » 编程设计

python中的迭代器(iterable)和迭代对象(iterator), type和isinstance

2022年07月27日179langtianya

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

本文参考链接:https://www.cnblogs.com/chen55555/p/10209677.html