zoukankan      html  css  js  c++  java
  • 九、迭代器、生成器、函数递归调用与二分法

    一、迭代器

    1. 什么是迭代器

    什么是迭代?

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

    #下列循环知识单纯的重复
    while True:
    print(1)

    # 基于索引的迭代取值

    l=['a','b','c']
    i=0

    while i < len(l):
    print(l[i])
    i+=1
    什么是迭代器?

    迭代取值的工具



    2. 为什么要用迭代器

    迭代器

    优点

    1. 提供一种不依赖索引的迭代取值方式

    2. 更节省内存
    缺点:

    1. 不如按照索引的取值方式灵活

    2. 取值一次性的,只能往后取,无法预测值的个数

    3. 如何用迭代器

    可迭代的对象:strlist upledictset文件对象

    但凡内置有__iter__方法的对象都称之为可迭代对

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

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

    二、生成器
    生成器就是一种自定义的迭代器

    如何得到生成器?
    但凡函数内出现yield关键字,再去调用函数不会立即执行函数体代码,会得到一个返回值,该返回值就是生成器对象,即自定义的迭代器
    
    
    总结yield:
    1. 提供一种自定义迭代器的解决方案
    2. yield & return
    相同点: 都可以返回值,返回值没有类型限制个数限制
    不同点: return只能返回一次值,yield却可以让函数暂停在某一个位置,可以返回多次值

    三、函数递归调用与二分法
    1. 函数的递归调用:

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

    递归必须满足两个条件:

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

    2. 递归必须有一个明确的结束条件

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

    2. 递推
    例:
    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)
     
     
     
     
  • 相关阅读:
    Python os 方法指南
    网站后台500错误分析
    HTML中的meta标签常用属性及其作用总结
    Python线程理论
    python之struct详解
    python之路——初识面向对象
    configparser和hashlib模块
    logging模块
    re模块
    pickle,shelve,json模块
  • 原文地址:https://www.cnblogs.com/lanlan999/p/10061035.html
Copyright © 2011-2022 走看看