• Python-生成器函数(协程实现底层原理)-yield


    yield

      1. 函数执行的时候,找到yield关键字,则会标记这个函数,返回生成器对象

      2. Python解释器会记录最近一次函数中yield位置

      3. 生成器对象也是分配在栈堆上

      4. 通过yield关键字,让程序员主动控制函数的运行状态,暂停函数还继续运行

      5. 生成器可以return值

    def fib():
        """斐波那契数列生成器"""
        start, end = 1, 1
        hai = yield start
        print(hai)
        hai = yield end
        print(hai)
        while True:
            start, end = end, start + end
            hai = yield end
            print(hai)
    
    
    if __name__ == '__main__':
        func = fib()
        one = func.send(None)
        two = func.send("beimenchuixue_1")
        three = func.send("beimenchuixue_2")
        four = func.send("beimenchuixue_3")
        print(one, two, three, four)
    

      

     函数运行原理

      Python解释器是用C语言写的,会用PyEvalFramEx(c函数)去执行我们的函数,会首先创建一个栈帧(stack frame)

      Python一切皆对象,栈帧对象,运行字节码对象 import dis dis.dis(funcName)
      当函数调用子函数,又会创建一个栈帧
      所有的栈帧都是分配在堆的内存上,这就决定了栈帧可以独立调用者存在

  • 相关阅读:
    Redis学习笔记
    Sevrlet 工作原理解析-转
    Spring MVC基础学习
    JVMGC机制
    MyBatis基础学习笔记--摘录
    MyBatis基础学习笔记--自总结
    Spring基础复习
    java.lang.Class类
    浅谈linux静态库、动态库。
    关于字符编码的一点学习。
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/9145529.html
Copyright © 2020-2023  润新知