Python快速入门03

  1. 迭代器就是用来迭代取值的工具,单纯的重复并不是迭代 Python快速入门03
    while True:
        msg = input('>> ').strip()
        print(msg)
    View Code

     

  2. Python快速入门03
    #!/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

     

  3. 上述案例用到的是索引取值,那么对于字典、集合等没有索引的类型怎么取值呢,那么就必须要找到一种不依赖索引来进行迭代取值的方式,这就用到了迭代器。
  4. 可迭代对象:内置有__iter__方法的对象都是可迭代对象,比如字符串,列表、元组、字典、集合、打开的文件
  5. 迭代器对象:调用obj.iter()方法返回的就是一个迭代器对象。
  6. 迭代器对象内置有__iter__和__next__方法的对象。
  7. 执行迭代器对象的.iter()方法得到的仍然是迭代器本身,而执行迭代器.next()方法就会计算出迭代器的下一个值。
  8. 迭代器是Python提供的一种统一的不依赖于索引的迭代取值方式,只要存在多个值,无论是序列类型还是非序列类型都可以按照迭代器的方法取值。
  9. Python快速入门03
    #!/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

     

  10. 基于索引的迭代取值,所有的迭代状态都保存到了索引中,基于迭代器的迭代取值,所有的迭代状态都保存在了迭代器中
  11. 迭代器优点:为序列和非序列的类型提供了一种统一的迭代取值方式;惰性计算:在需要的时候迭代器对象才会调用内置的__next__来计算出一个值,也就是说就迭代器本身来说,同一时刻在内存中只有一个值,因此可以存放无限大的数据流。对于列表、字典、元组等容器类型,需要把所有的元素都存放在内存中,受内存大小限制,可以存放的值是有限的。
  12. 迭代器的缺点:除非取尽,否则无法获取迭代器的长度;只能取下一个值,迭代器产生后就是重复执行next方法直到值取尽,否则就会停留在某个位置,等待下一次next。 Python快速入门03
    #!/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

     

上一篇:Android界面坐标图示和Rect(矩形)简介


下一篇:旋转链表(rotateRight) Leetcode 20