目录
🏠前言:
本篇博客主要向各位小伙伴们介绍的<Python生成器面试题>,带各位掌握Python希望各位小伙伴们能够在这里收获到更多知识!让我们一起学习!一起进步!
作者希望:由于博主水平限制,博客难免会有错误和不准之处,我也非常希望各位小伙伴能够在留言区指出。让我们一起共勉。
🦠面试题一(难度为中等偏上且必须掌握)
🏵️🏵️题目要求
以下代码执行后的输出结果是什么?
def func(): for i in range(4): yield i g=func() g1=(i for i in g) g2=(i for i in g1) print(list(g1)) print(list(g2))
🏵️🏵️题目提示
1、同一个生成器中的数据只能取一次,取完就没有了
2、生成器的特点惰性运算:不找生成器取值,它就根本不工作
🏵️🏵️流程图分析
🏵️🏵️答案以及解析
✨运行结果✨
✨解析✨
1、先定义了三个生成器g、g1、g2
g=func() g1=(i for i in g) g2=(i for i in g1)
2、因为遇到了list(g1),所以list要向g1要值,由于g1 = (i for i in g),所以g1又向g要值然后g执行依次返回0,1,2,3给g1,g1又依次返回给list,所以最后打印出了[0,1,2,3]
下一步执行list(g2)所以g2要向g1要值。因为g1的值在list(g1)的时候都给了list,所以g1里面已经没有值了,所以g1更不会向g取值,所以list(g2)打印出的只是一个空列表
✨拓展思考✨
如果将print(list(g1))注释掉打印出的结果是什么:
因为没有list(g1)向g1要值,所以g是不为空的,所以list(g2)打印的结果是[0,1,2,3]
🦠面试题二(难度为难且必须掌握)
🏵️🏵️题目要求
下列代码执行后的输出结果是什么:
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() for n in [1,10]: g=(add(n,i) for i in g) print(list(g))
🏵️🏵️题目提示
将代码中的
for n in [1,10]: g=(add(n,i) for i in g)
用以下代码替换之后在思考一下
n = 1 g = (add(n,i) for i in g) n = 10 g = (add(n,i) for i in g)
🏵️🏵️答案以及解析
✨运行结果✨
✨解析✨
将提示中的代码进一步替换
n = 1 g = (add(n,i) for i in g) n = 10 g = (add(n,i) for i in g)
替换为以下代码:
n = 1 g = (add(n,i) for i in g) n = 10 g = (add(n,i) for i in (add(n,i) for i in test()))
题目就可以替换为
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() n = 1 g = (add(n,i) for i in g) #当执行n=10后n=1就彻底消失了,就不用管了 n = 10 g = (add(n,i) for i in (add(n,i) for i in test())) #也可以进一步换为g = (add(10,i) for i in (add(10,i) for i in test())) print(list(g))
所以代码运行结果为:[20, 21, 22, 23]就显而易见了
如果面试题三已经明白了,那就做一下面这个进阶版的面试题三吧(如果还没懂的话额…那就多看几遍吧相信一定会看懂💪💪)
🦠面试题三进阶版
🏵️🏵️题目要求
下列代码执行后的输出结果是什么?
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() for n in [1,10,5]: g=(add(n,i) for i in g) print(list(g))
🏵️🏵️答案以及解析
✨运行结果✨
✨解析✨
可以将代码等价为如下代码
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() #for n in [1,10,5]: # g=(add(n,i) for i in g) n = 1 g=(add(n,i) for i in g) #g=(add(n,i) for i in test()) n = 10 g=(add(n,i) for i in g) #g=(add(n,i) for i in (add(n,i) for i in test())) n = 5 g=(add(5,i) for i in (add(5,i) for i in (add(5,i) for i in test()))) print(list(g))
相信通过上面的代码你就可以更好的了解题目,和答案的产生了到此本次分享就结束了😊😊
🏠结语:
感谢各位能够看到这里:
最后一句:代码看懂了不是懂,一定要自己实际操作哇,这样才能更好的理解和吸收。
最后来一句:一个人可以在任何他怀有无限热忱的事情上成功,让我们一起进步吧!!