• 迭代器,生成器


    迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续
    迭代取值的工具

    迭代器的优点:
      1.提供一种不依赖索引的迭代取值方式
      2.更节省内存
    缺点:
      1.不如按照索引的取值方式灵活
      2.取值一次性的,只能往后取,无法预测值的个数

    可迭代的对象
    可迭代的对象:strlist upledictset文件对象
      但凡内置有__iter__方法的对象都称之为可迭代对象

    迭代器对象:文件对象
      既内置有__iter__方法又内置有__next__方法的对象都称之为迭代器对象

      调用可迭代对象下__iter__方法,会有一个返回值,该返回值就是一个迭代器对象

    for循环的底层原理
      1.调用in后面的那个值对象的iter方法,拿到一个迭代器对象iter_obj
      2.调用迭代器对象iter_obj.__next__()将得到的返回值赋值变量名k,循环往复直到取值完毕抛出异常Stopiteration
    捕捉异常结束循环
    try:
    except StopIteration:

    d={'k1':11,'k2':22}
    iter_d=d.__iter__()# iter_d=iter(d)
    print(iter_d.__next__())
    print(iter_d.__next__())

    生成器就是一种自定义的迭代器
    如何得到生成器
    但凡函数内出现yield关键字,再调用函数不会立即执行函数体代码,会得到一个返回值,该返回值就是一个生成器
    def func():
      print('first')
      yield 1
      print('second')
      yield 2
      print('third')
      yield 3

    g=func()
    next(g)
    next(g)
    next(g)

    总结yield:
      1.提供一种自定义迭代器解决方案
      2.yield & return
      相同点:都可以返回值,返回值没有类型限制个数限制
      不同点:return只能返回一次值,yield却可以让函数暂停在某一个位置,可以返回多次值


    def range(x):
      i=x
      while True:
        yield i
        i+=1

    g=range(1)
    for i in g:
      print(i)


    def my_range(start,stop,step=1):
      while start < stop:
      yield start
      start+=step

    for i in my_range(1,50,2):
      print(i)


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

    递归必须满足两个条件:
      1.每进入下一次递归调用,问题的规模都应该有所减少
      2.递归必须有一个明确的结束条件

    递归有两个明确的阶段:
      1.回溯
      2.递推

    l=[1,[2,[3,[4,]]]]
    def func(list1):
      for item in list1:
        if type(item) is not list :
          print(item)
        else:
          func(item)
    func(l)

    l=[1,2,3,4,44,55,66,77,88,201,322,520]
    find_num=201
    def binary(list1,find_num):
      print(list1)
      if len(list1) == 0:
        print("not exist")
      return
      mid_index=len(list1)//2
      if find_num>list1[mid_index]:
        binary(list1[mid_index + 1:],find_num)

      elif find_num<list1[mid_index]:
        binary(list1[:mid_index], find_num)

      else:
    print("find it")

    binary(l,203)

  • 相关阅读:
    moment JS 时间操作指南
    react 项目使用 echarts-wordcloud(文字云)
    moment实现计算两个时间的差值
    JS实现回到页面顶部的五种写法(从实现到增强)
    关于谷歌浏览器携带cookie失效解决方案
    Axios发送请求下载文件(重写二进制流文件)
    修改 input / textarea placeholder 属性的颜色和字体大小
    js实现数组浅拷贝和深拷贝
    JS中的可枚举属性与不可枚举属性
    物流管理
  • 原文地址:https://www.cnblogs.com/xuezhihao/p/10058457.html
Copyright © 2020-2023  润新知