Python-4迭代器

1.迭代器:指的是能被next()调用且不断返回下一个值的对象,迭代器是一个工具,一个重复的过程,每一次都是基于前一次的结果上进行,不依赖于索引每次只取出一个值,(能够大大节省空间和资源)

2.可迭代对象:可以依次遍历出所有的值(可以使用for 循环)

3.可迭代对象不一定是迭代器

 迭代器一定是可迭代对象

4.isinstance() 函数来判断一个对象是否是一个已知的类型,类似于type()

"""
-*- coding: utf-8 -*-
@FileName: 迭代器.py
@Software: PyCharm
@Time    : 2023/4/28 14:17
@Author  : Panda
"""


from collections import Iterable, Iterator


# 1.可迭代对象
set_var = {'no1', 'no2', 'no3', 'no4'}
# dir 获取当前对象的内置成员
lst = dir(set_var)
# 判断是否迭代
res = '__iter__' in lst
print(res)
# Output:True

# 2.生成一个迭代器,(本质上迭代器也是一个对象)
it = iter(set_var)  # 也可以另一种写法  it = __iter__()
print(it)
# Output: <set_iterator object at 0x00000174D2DFCAF8>

result = ("__iter__" and "__next__") in dir(it)
print(result)
# Output: <set_iterator object at 0x0000025863E82A20>

list_dir = dir(it)
print(list_dir)
# Output: ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__',
# '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__',
# '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__', '__next__',
# '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

# 3.迭代取值 单向不可逆
result_ = next(it)
# 也可以 it.__next__() 取值 和 next()的本质是一样的,只是写法不一样
print(result_)
result_ = next(it)
print(result_)
result_ = it.__next__()
print(result_)
result_ = it.__next__()
print(result_)
# Output: no3 no2 no4 no1
# result_ = it.__next__()
# print(result_)
# Output: StopIteration 如果迭代器里面没有数据了,则会报错“StopIteration”--停止迭代的错

# 4.判断是否是迭代器和迭代对象
res = isinstance(range(10), Iterator)
res1 = isinstance(range(10), Iterable)
print(res, res1)
# Output: False True


# 5.控制迭代次数可以使用for循环
itt = range(10).__iter__()
for i in range(2):
    print(itt.__next__())
# Output: 0 1

print(next(itt))
# Output: 2

for j in itt:
    print(j)
# Output: 3 4 5 6 7 8 9

 

posted @ 2023-04-28 15:12  许个未来—  阅读(8)  评论(0编辑  收藏  举报