美文网首页
Day11——递归函数/模块/迭代器/生成器

Day11——递归函数/模块/迭代器/生成器

作者: Devil灬 | 来源:发表于2019-01-07 19:26 被阅读0次

    一、递归函数

    第一步:确定临界值 - 循环结束的条件,在临界值的地方要让函数结束!
    第二步:找关系 - 找当次循环和上次循环的关系;找f(n)和f(n-1)的关系
    第三步: 假设函数f的功能已经实现,通过f(n-1)来实现f(n)的功能

    实现:1+2+3+...+n
    def gx_sum(n):
        # 1.找临界值
        if n == 1:
            return 1
    
        # 2. 找关系
        return gx_sum(n - 1) + n
    
    print(gx_sum(5))
    
    求斐波那契数列第n个数
    def sequence(n):
        # 1. 找临界值
        if n == 1 or n == 2:
            return 1
        # 2. f(n) = f(n-1)+f(n-2)
        return sequence(n-1)+sequence(n-2)
    
    print(sequence(5))
    

    二、模块

    导入格式 调用格式 使用范围
    import 模块名 模块名.变量 所有的全局变量(包含了变量、函数和类)
    from 模块名 import 变量1, 变量2... 直接使用变量 只能使用import后面的变量
    • 阻止模块中的内容被其他模块执行
      if name == 'main'

    • 重命名:
      import 模块名 as 新模块名
      from 模块名 import 变量名1 as 新变量名1, 变量名2, 变量名3 as 新变量名3...


    三、迭代器

    迭代器作为容器,里面的元素只能通过其他序列转换,或者通过生成器生成
    迭代器中的元素可以是任何类型的数据

    • 格式:
      iter(序列)
    • 获取元素:
      next(迭代器) -> 获取迭代器中最新的数据(最顶层)
      for 变量 in 迭代器:

    四、生成器

    生成器就是迭代器, 迭代器不一定是生成器

    调用一个带有yield关键字的函数就能得到一个生成器,调用的时候不会执行函数体,也不会获取返回值,而是产生一个生成器(函数调用表达式就是一个生成器), 这个生成器中的元素就是yield关键字后面的值

    生成式:

    格式:
    生成器 = (表达式 for 变量 in 序列)
    生成器 = (表达式 for 变量 in 序列 if 条件语句)

    含义:
    让变量去序列中取值,每取一个值就将对应的表达式的值作为生成器的元素

    示例:
    交换字典的key和value的位置

    dict1 = {'a': 1, 'b': 2, 'c': 3}
    result = dict((x, y) for y, x in dict1.items())
    print(result)
    

    相关文章

      网友评论

          本文标题:Day11——递归函数/模块/迭代器/生成器

          本文链接:https://www.haomeiwen.com/subject/sgdurqtx.html