想用3分钟说清楚什么是yield关键词,有一定挑战。如果往深里说,就带出来迭代器,生成器,协程等等,可能要说3个小时。
我尽量用3分钟说清楚它的本质,来我们一起加油,看看3分钟能不能说清楚。
我直接说结论,然后再解释:
暂时不明白没关系,我们后面继续说。
理解一个东西最好的办法就是找一个和它类似的东西,然后再搞清楚它们之间的区别。
yield最类似的东西就是return,因为他们起到了同样的作用:返回值。
看这个return的函数:
# 点外卖
def waimai(name):
print('cooking ' + name)
print('............')
print('此处省略2022行做饭的语句')
print('............')
return f'美味的{name}好了'
print(waimai('蛋炒饭'))
print(waimai('胡辣汤'))
这个函数每次都是按照你的参数要求,为你制作饭菜,最后返回给你。
虽然它可能使用了分支语句,有多个return,但一旦遇到了return,函数执行就结束了。
下次再调用它,是一次全新的调用,和上一次调用是没有关系的。
所以我们说它是无状态的。可以理解吧?
假设这样一个场景:我们去酒吧,开了一瓶名贵的啤酒,价值2022元。一次性喝不完,可以保存在酒吧,下次再来喝。
用一个函数来模拟这个开酒的过程:
# 喝点酒
def have_some_wine():
print('先开一瓶酒,共有700毫升')
wine = 700
while wine > 0:
# 取酒
if wine > 200:
get_wine = 200
wine = wine - 200
else:
get_wine = wine
wine = 0
# 把酒送给客人
print('您的酒来了:200毫升')
yield get_wine
注意这个函数的特点:
我们来调用一下这个函数,通过for循环可以多次来喝mywine:
# 开一瓶酒
mywine = have_some_wine()
# 可以多次来喝,直到喝光为止
for i in mywine:
print(f'我今天喝{i}毫升')
运行结果是这样的:
开了一瓶酒,共有700毫升
您的酒来了:200毫升
我今天喝200毫升
您的酒来了:200毫升
我今天喝200毫升
您的酒来了:200毫升
我今天喝200毫升
您的酒来了:200毫升
我今天喝100毫升
[Finished in 33ms]
如果我们再写一个for循环,会发现运行结果是一样的。第二次取酒不会有任何结果,因为酒已经喝光了。
# 开一瓶酒
mywine = have_some_wine()
# 可以多次来喝,直到喝光为止
for i in mywine:
print(f'我今天喝{i}毫升')
# 可以多次来喝,直到喝光为止
for i in mywine:
print(f'我今天喝{i}毫升')
这就是我说的使用yield的函数是有状态的函数,会记住上次运行的结果,再上次的基础上继续运行或者停止运行。
我们再来总结一下:
作为一个代码打工仔,对于绝大部分程序员来说,想要成为牛逼的真正挣钱程序员的路还很长,一刻都不能懈怠。
我们无法从HR角度,或者技术leader的角度来臆测哪种状态的面试更能获取面试官青睐。但通过我们积攒的大量的面试经验,大家多少可以推断一些成为有竞争力的程序员的一些必要条件。
当初我在字节认识一个非常非常资深的前辈,他到字节比我早三年,但因为各种原因级别不是很高。我当时问他,既然你对现状如此不满,为什么不想着离开寻找更好的机会呢?
他沉思了片刻跟我说,他说我现在在这里虽然待着不顺心,但是我接触到的人都是非常优秀的。我遇到问题,还可以和你们讨论讨论。我如果出去了,我要是再遇到问题,可能连一个讨论的人都没有。
我当时听听只是觉得有道理,现在再回想起来,感受非常深刻。三观、格局、能力,能够进入大公司的,这三个方面一般都不会太差。别的不说,就拿个人能力而言,我曾出国出差过几个月,有幸见识了许多各种海外名校的同事,和他们学习交流人工智能,这真的让我AI有了更深层次的认识。
除了优秀的同事之外,大公司里往往还有丰富的内部文档和资料。我当时在字节内部看到了很多优秀的文章,也有很多优秀的技术沙龙和分享。现在想起来两年下来,也没有去过几次,文章和资料看得也不算多,现在想想颇为遗憾。别的不说,就拿推荐领域而言,近些年质量不错的论文往往都来源于大公司尤其是国内的大公司,以腾讯、华为和头条为主。除了公开的论文,公司内部还有很多技术相关的资料和文档,这些真的可以说是有价无市,非常珍贵。
Python 知识手册
Linux 知识手册
爬虫查询手册
而且,这些资料不是扫描版的,里面的文字都可以直接复制,非常便于我们学习:
数据分析知识手册:
机器学习知识手册:
金融量化知识手册:
我们大量需要前端岗位、python岗位、Java 岗位、Android 和 iOS 的开发岗位,工作地点:北京字节,欢迎校招社招扫描下方二维码找我内推
Python资料、技术、课程、解答、咨询也可以直接点击下面名片,
添加官方客服斯琪
↓