• 迭代器


    day 13

    一、迭代器

    1、什么是迭代?什么是迭代器?

      迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来。

      迭代器即迭代取值的工具。

    2、为什么要用迭代器?

      迭代器的特点:

      优点:a、提供一种不依赖索引的迭代取值方式;

         b、更节省内存。

      缺点:a、不如按照索引的取值方式灵活;

         b、取值一次性的,只能往后取,无法预测值的个数。

    3、如何用迭代器:

      可迭代对象:但凡内置有__ iter__方法的对象都称之为可迭代对象,如:strlist upledictset文件对象。

      迭代器对象:既内置有__ iter__ 方法又内置有__ next__方法的对象都称之为迭代器对象,如文件。

      迭代器对象与可迭代对象的关系:

        迭代器对象 = 可迭代的对象.__ iter__()

        迭代器对象本身 = 迭代器对象. __ iter__()

    # d={'k1':111,'k2':222,'k3':333}
    # iter_d=d.__iter__()
    # iter_d=iter(d)         #d.__iter__
    # print(next(iter_d))    #iter_d.__next__()

    二、生成器

    1、生成器的定义

      在函数内,但凡出现yield关键字,在调用函数就不会执行函数体代码,会返回一个值,该值称为生成器。

      生成器的本质就是自定义的迭代器。

    # def func():
    #     print('first')
    #     yield 1
    #     print('second')
    #     yield 2
    #     print('third')
    #     yield 3
    #
    # g=func()        #调用函数 函数的返回值即为一个生成器
    # print(g)

    2、return vs yield 对比

    # 总结yield:
    # 1. 提供一种自定义迭代器的解决方案
    # 2. yield & return
    #    相同点: 都可以返回值,返回值没有类型限制个数限制
    #    不同点: return只能返回一次值,yield却可以让函数暂停在某一个位置,可以返回多次值
    # def my_range(start,stop,step=1):
    #     while start < stop: # 5 < 5
    #         yield start # 3
    #         start+=step #start=5
    # range(1,5,2) # 1 3
    # for i in my_range(1,50000,2): # 1 3
    #     print(i)

    三、递归

    1、函数的递归调用:在调用一个函数的过程又直接或者间接地调用该函数本身,称之为递归调用

    2、递归调用必须要满足的两个条件:

      a、每进入下一次递归调用,问题的规模都应该有所减少

      b、递归必须有一个明确的结束条件

    3、递归的两个阶段:

    a、回溯

      注意:一定要在满足某种条件时结束回溯,否则会无限的递归。

    b、递推

    # 递归的使用实例
    nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341]
    ​
    def binary_search(list1,find_num):
        print(list1)
        if len(list1) == 0:
            print('not exist')
            return
        mid_index=len(list1) // 2
        if find_num > list1[mid_index]:
            # in the right
            binary_search(list1[mid_index + 1:],find_num)
        elif find_num < list1[mid_index]:
            # in the left
            binary_search(list1[:mid_index],find_num)
        else:
            print('find it')
    ​
    binary_search(nums,203)

     

  • 相关阅读:
    java实现第六届蓝桥杯立方尾不变
    java实现第六届蓝桥杯立方尾不变
    java实现第六届蓝桥杯隔行变色
    java实现第六届蓝桥杯隔行变色
    java实现第七届蓝桥杯交换瓶子
    java实现第七届蓝桥杯交换瓶子
    java实现第七届蓝桥杯寒假作业
    Ubuntu 美团sql优化工具SQLAdvisor的安装(转)
    mapper提示Could not autowire. No beans of … type found?
    aop 中joinpoint的使用方法
  • 原文地址:https://www.cnblogs.com/peng-zhao/p/10058816.html
Copyright © 2020-2023  润新知