目录
前言:
裂面试题一(难度为中等偏上且必须掌握)
️️题目要求
️️题目提示
️️流程图分析
️️答案以及解析
✨运行结果✨
✨解析✨
✨拓展思考✨
裂面试题二(难度为难且必须掌握)
️️题目要求
️️题目提示
️️答案以及解析
✨运行结果✨
✨解析✨
裂面试题三进阶版
️️题目要求
️️答案以及解析
✨运行结果✨
✨解析✨
结语:
前言:
本篇博客主要向各位小伙伴们介绍的,带各位掌握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 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 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]就显而易见了
✨运行结果✨
✨解析✨
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]:
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))
相信通过上面的代码你就可以更好的了解题目,和答案的产生了到此本次分享就结束了
结语:
感谢各位能够看到这里:
最后一句:代码看懂了不是懂,一定要自己实际操作哇,这样才能更好的理解和吸收。
最后来一句:一个人可以在任何他怀有无限热忱的事情上成功,让我们一起进步吧!!
下列代码执行后的输出结果是什么?
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))
相信通过上面的代码你就可以更好的了解题目,和答案的产生了到此本次分享就结束了
感谢各位能够看到这里:
最后一句:代码看懂了不是懂,一定要自己实际操作哇,这样才能更好的理解和吸收。
最后来一句:一个人可以在任何他怀有无限热忱的事情上成功,让我们一起进步吧!!



