Python快速入门03
作者:互联网
- 迭代器就是用来迭代取值的工具,单纯的重复并不是迭代
while True: msg = input('>> ').strip() print(msg)
View Code -
#!/usr/bin/env python # author:lijipeng hobbies = ['sing','on foot','table tennis'] index = 0 while index < len(hobbies): print(hobbies[index]) index+=1 #①:满足重复 #②:并且以每次重新赋值后的Index值作为下一次循环的索引进行取值,反复迭代 #最终可以取尽列表中所有的值
View Code - 上述案例用到的是索引取值,那么对于字典、集合等没有索引的类型怎么取值呢,那么就必须要找到一种不依赖索引来进行迭代取值的方式,这就用到了迭代器。
- 可迭代对象:内置有__iter__方法的对象都是可迭代对象,比如字符串,列表、元组、字典、集合、打开的文件
- 迭代器对象:调用obj.iter()方法返回的就是一个迭代器对象。
- 迭代器对象内置有__iter__和__next__方法的对象。
- 执行迭代器对象的.iter()方法得到的仍然是迭代器本身,而执行迭代器.next()方法就会计算出迭代器的下一个值。
- 迭代器是Python提供的一种统一的不依赖于索引的迭代取值方式,只要存在多个值,无论是序列类型还是非序列类型都可以按照迭代器的方法取值。
-
#!/usr/bin/env python # author:lijipeng hobbies = ['sing','on foot','table tennis'] i = iter(hobbies) # 每次都需要重新获取一个迭代器对象 while True: try: print(next(i)) except StopIteration: # 捕捉异常,然后终止循环 break for item in hobbies: print(item) # for循环的工作原理: # ①、调用可迭代对象hobbies内置__iter__得到一个迭代器对象 # ②、调用迭代器对象内置的__next__得到一个值 # ③、将得到的值赋给item,执行循环体完成一次循环 # ④、一直到捕捉到StopIteration一场,结束迭代
View Code - 基于索引的迭代取值,所有的迭代状态都保存到了索引中,基于迭代器的迭代取值,所有的迭代状态都保存在了迭代器中
- 迭代器优点:为序列和非序列的类型提供了一种统一的迭代取值方式;惰性计算:在需要的时候迭代器对象才会调用内置的__next__来计算出一个值,也就是说就迭代器本身来说,同一时刻在内存中只有一个值,因此可以存放无限大的数据流。对于列表、字典、元组等容器类型,需要把所有的元素都存放在内存中,受内存大小限制,可以存放的值是有限的。
- 迭代器的缺点:除非取尽,否则无法获取迭代器的长度;只能取下一个值,迭代器产生后就是重复执行next方法直到值取尽,否则就会停留在某个位置,等待下一次next。
#!/usr/bin/env python # author:lijipeng hobbies = ['sing','on foot','table tennis'] i = iter(hobbies) while True: try: print(next(i)) except StopIteration: break # i1 = iter(hobbies) # 两个或者多个循环使用同一个迭代器,必然只会有一个循环能取到值 while True: try: print(next(i)) except StopIteration: break
View Code
标签:__,03,入门,迭代,Python,iter,next,hobbies,取值 来源: https://www.cnblogs.com/lixiangzhaolei/p/15860296.html