栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【周周Python进阶题】Day2~生成器面试题(你真的了解Python生成器吗?)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【周周Python进阶题】Day2~生成器面试题(你真的了解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))

相信通过上面的代码你就可以更好的了解题目,和答案的产生了到此本次分享就结束了

结语:

感谢各位能够看到这里:

最后一句:代码看懂了不是懂,一定要自己实际操作哇,这样才能更好的理解和吸收。
最后来一句:一个人可以在任何他怀有无限热忱的事情上成功,让我们一起进步吧!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943149.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号