python特性(三):iter方法

iter方法是python的一个内建方法,它会返回一个迭代器对象。它定义如下

iter(o[, sentinel])

第一个参数o可以是一个可迭代对象,也可以是一个可调用对象。

当参数o是可迭代对象时,第二个参数可省。这里又分为两种情况。

  • 如果参数o实现了__iter__方法,则直接调用该方法,创建迭代器。
  • 如果参数o没有实现__iter__方法,那么它比是一个序列对象。iter方法根据该序列对象诱导出一个迭代器。

如果参数o是一个可调用对象时,iter方法返回的迭代器工作原理如下。

每次调用迭代器的next方法时,最终都会调用o方法。此时第2个参数sentinel必须给定。当o方法的返回值与sentinel相同时,抛出StopIteration异常。


一些例子


1. 由集合构造迭代器

myiter = iter([1,2,3])
myiter.next()
myiter.next()
myiter.next()
myiter.next()

输出结果

1
2
3
Traceback (most recent call last):
  File "test.py", line 27, in <module>
    print myiter.next()
StopIteration

2. 由序列对象构造迭代器。

myiter = iter(MyRange(1, 4))
print myiter.next()
print myiter.next()
print myiter.next()
print myiter.next()
MyRange的定义见 博文


3. 由迭代器对象构造迭代器。

myiter1 = MyIterator(1, 4)
myiter2 = iter(myiter1)
print myiter1 == myiter2
MyIterator的定义见 博文。上面代码输出的值为True。


4. 由可调用对象构造迭代器。

myiter1 = MyIterator(1, 4)
myiter2 = iter(myiter1.next, 4)

print myiter2.next()
print myiter2.next()
print myiter2.next()
print myiter2.next()

输出结果

1
2
3
Traceback (most recent call last):
  File "test.py", line 27, in <module>
    print myiter.next()
StopIteration


有兴趣的读者可以尝试下面代码的输出结果。

myiter2 = iter(myiter1.next, 3)
print myiter2.next()
print myiter2.next()
print myiter2.next()
print myiter2.next()
myiter2 = iter(myiter1.next, 5)
print myiter2.next()
print myiter2.next()
print myiter2.next()
print myiter2.next()


  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值