【未校对】【不严谨】【包含主观意见】【非科普】大白话介绍协程
我把警告放在标题上,这不是为了我想要显得科学严谨而写的,而是确实如此,我觉得有必要告诉大家我在编程方面只是一个nobody,因此无法及时地分辨出可能存在的错误
所以再次提醒,希望大家就尽量把它当做一篇通俗读物来处理就好,不要当做科普读物也不要用这个来完善技术概念矩阵,这很可能会带来误区,因为我的大白话并不是我的描述达到深入浅出的境界,而只是因为水平有限只能写得浅显
好,闲言少叙
首先,我们看一个斐波那契数列
def fib(): |
我们都知道,Python中万物皆对象,那么上面这个fib得到调用后,产生的这个fib()就是一个函数对象啦,但是这个函数对象他的类型跟别人不一样,因为他没有返回值嘛,所以他作为一个函数对象,他的类型就很特殊,就是<class 'generator'>
然后是一个新知识点,就是:像<class 'generator'>这样的对象(这个不一定准确,只是一个印象)在产生的时候,会有一个gi_flame的栈产生,每产生一个对象,他就会有一个新的独立的gi_flame产生,这些gi_flame是各个不同的;同时,他们的gi_code属性(也就是代码段)则完全相同(这里我不知道这些对象他们是共用了一个内存区的gi_code呢还是各自复制了一份新的,只知道他或他们是不变的)
妈的已经有人写了一篇跟我完全一样的文章了,艹!
从 Python 字节码与栈帧的层面来理解 yield 的机制
为什么每次我想搞点东西出来都会有人比我先做到,难受啊唉~
看起来这个作者似乎很关心社会事务,那这很好,我也给他做一个推广好了,好人啊,好人是应该得到好报的!
那就这样,你们都去看这篇文章就可以了,这篇是非常不错的(还是忍不住,骂骂咧咧地离开了直播间…)
如果要理解协程,可以结合这篇一起看
explain-coroutines-like-im-five