Python之函数(六)迭代器与递归

我们两清 提交于 2019-11-28 16:19:59

4.8 迭代器

  1. 可迭代对象

    # 迭代:  器:工具
    
    # 可迭代对象
    
    # list,dict,str,set,tuple -- 可迭代对象  使用灵活
    #迭代对象判断
    #方式一
    #对象具有__iter__()方法则为迭代对象
    
    #方式二
    #查看源码 CTRL+鼠标左键
    
    #方式三
    #print(dir(list)) 查看是否有__iter__()方法
    
    #官方声明只要具有__iter__()方法的就是可迭代对象
    
    #可迭代对象的优点:
    #    使用 灵活
    #    直接查看值
    #可迭代对象的缺点:
    #占位内存
    
    #取值方式:
    #list str tuple --索引
    #dict --键
    #set -- 直接取值
  2. 迭代器

    #官方声明只要具有__iter__()方法__next__()方法就是迭代器
    f = open("xxxx","w")
    f.__iter__()
    f.__next__()
    
    lst=[1,2,3]
    new_lst=lst.__iter__()#将可迭代对象转换成迭代器
    new_lst.__iter__()
    new_lst.__next__()
  3. for循环的本质

    s="123"
    count=len(s)
    new_s=s.__iter__()
    while count:
     print(new_s.__next__())
     count-=1
    #结果为:3 2 1
    
    #for 循环真实本质
    s="123"
    new_s=s.__iter__()
    while True:
        try:
            print(new_s.__next__())
        except StopIteration:
            break
     #迭代器的优缺点:
    #优点:节省内存,惰性机制
    #缺点:使用不灵活,操作比较繁琐,不能直接查看值
  4. 总结

    迭代器的特性:
     1、一次性的(用完就没了 )
     2、不能逆行(不能 后退)
     3、惰性机制(节省内存)
    什么是可迭代对象:
     具有很多私有方法,具有__iter__()方法就是一个可迭代对象
    什么是迭代器:
    具有__iter__()和__next__()方法就是迭代器
    
    迭代器什么时候使用:当容器数据比较多的时候使用迭代器

4.9 递归

  1. 简介:自己调用自己(不断调用自己本身)--死循环; 有明确终止条件;满足以上两个条件才是有效递归

  2. 递:一直执行碰到结束条件

  3. 归:从结束条件一直回退

  4. 官方声明:最大层次1000 实际测试998/997 可手动修改

  5. 递归死循环

    def func()
     print(123)#2、输出123
     func()#3、不断调用func函数
    func()#1、调用func函数
  6. 递归无返回值

     def age(n): # 1,2,3
         if n == 3:
             return "猜对了"
         else:
             age(n+1)
     print(age(1))
    
     def age2(n):
         if n == 3:
             return "猜对了"
    
     def age1(n):
         if n == 3:
             return "猜对了"
         else:
             age2(n+1)
    
     def age(n):
         if n == 3:
             return "猜对了"
         else:
             age1(n+1)
     age(1)
    #当n=3时候有返回值 n=2 n=2时候无返回值所以是None

  7. 递归有返回值

    # 1.宝元  18-2-2-2
    # 2.太白  18-2-2
    # 3.wusir 18-2
    # 4.alex  18
    
     def age(n):
         if n == 4:
             return 18
         else:
             return age(n+1)-2
     print(age(1))
    
    
     def age4(n):
         if n == 4:
             return 18
     def age3(n):
         if n == 4: # 问的是不是第四个了
             return 18
         else:
             return age4(n+1)-2
     def age2(n):
         if n == 4:  # 问的是不是第四个了
             return 18
         else:
             return age3(n+1)-2
     def age1(n):
         if n == 4: # 问的是不是第四个了
             return 18
         else:
             return age2(n+1)-2
     print(age1(1))
    #n=4 n=3 n=2 n=1 都有返回值 所以结果为18

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!