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

yieldpython

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

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

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

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

  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)

 

  

 函数运行原理blog

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

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

相关文章
相关标签/搜索