Python 基础 - 迭代器 / 迭代器对象 / 可迭代对象 / range函数

目录

1. 迭代器

2.迭代器对象

3. 可迭代对象

4. range函数


1. 迭代器

当类中定义了__iter__和 __next__两个方法

  • __iter__: 返回对象本身,即self
  • __next__: 返回下一个数据,如果没有数据,则抛出StopIteration异常
# 创建迭代器
class IT(object):
    def __init__(self):
        self.num = 100

    def __iter__(self):
        return self

    def __next__(self):
        self.num -= 1
        if self.num == -1:
            raise StopIteration()
        return self.num

2.迭代器对象

通过迭代器类实例化创建的迭代器对象

  • 可以通过 obj.__next__() 或 python内置函数next(obj) 来获取下一个数据
  • 还支持对迭代器对象进行for循环【注意:for循环在内部执行时,先执行__iter__()方法,获取一个迭代器对象,然后不断执行__next__取值
# 实例化迭代器对象
it = IT()
# 使用 __next__() 来获取下一个数据
print(it.__next__())    # 9
print(it.__next__())    # 8
# 使用 next(obj) 来获取下一个数据
print(next(it))         # 7
print(next(it))         # 6
# 使用 for 循环来遍历数据
for item in it:
    print(item, end=" ")   # 5 4 3 2 1 0

3. 可迭代对象

如果一个类中有__iter__方法并且返回一个迭代器对象,则称以这个类创建的对象叫可迭代对象。

  • 可迭代对象是可以用for来进行循环:与上述对迭代器对象的for循环步骤相同,先在循环内部先执行__iter__方法,获取迭代器对象,然后再执行迭代器对象的__next__函数,逐步取值。
  • List,tuple, dict和set都是可迭代对象
class IT2(object):
    def __iter__(self):
        return IT()     # 返回迭代器对象
    
it2 = IT2()    # 生成可迭代对象
for item in IT2():
    print(item, end=" ")    # 9 8 7 6 5 4 3 2 1 0 

4. range函数

在编程中常见的 range()函数,如 v1=range(100) 返回的是一个可迭代对象v1,因此

  • v2 = v1.__iter__获取的是迭代器对象,每执行一次 next(v2) 就会进行逐步取值
  • 或者用for循环进行遍历取值
v1 = range(5)
print(isinstance(v1, Iterable)) # True,返回的是可迭代对象

# 1. 使用for循环遍历
for v in v1:
    print(v, end=" ")   # 0 1 2 3 4 0

# 2. 先通过__iter__()获取迭代器对象,然后使用next获取到对应的值
v1_iterator = v1.__iter__() 
print(next(v1_iterator))    # 0
print(next(v1_iterator))    # 1
print(next(v1_iterator))    # 2
print(next(v1_iterator))    # 3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值