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

目录

🏠前言:

🦠​​​​​面试题一(难度为中等偏上且必须掌握)

🏵️🏵️题目要求

🏵️🏵️题目提示

🏵️​​​​​​​🏵️流程图分析

🏵️​​​​​​​🏵️答案以及解析

✨运行结果✨

✨解析✨

✨拓展思考✨

🦠面试题二(难度为难且必须掌握)

🏵️​​​​​​​🏵️题目要求

🏵️​​​​​​​🏵️题目提示

🏵️​​​​​​​🏵️答案以及解析

✨运行结果✨

✨解析✨

🦠面试题三进阶版

🏵️​​​​​​​🏵️题目要求

🏵️​​​​​​​🏵️答案以及解析

✨运行结果✨

✨解析✨

🏠结语:


🏠前言:

本篇博客主要向各位小伙伴们介绍的<Python生成器面试题>,带各位掌握Python希望各位小伙伴们能够在这里收获到更多知识!让我们一起学习!一起进步!

作者希望:由于博主水平限制,博客难免会有错误和不准之处,我也非常希望各位小伙伴能够在留言区指出。让我们一起共勉。

d61ffebdebcc4019897ec6fbab020faa.gif

🦠​​​​​​​​​​​​面试题一(难度为中等偏上且必须掌握

🏵️​​​​​​​🏵️题目要求

以下代码执行后的输出结果是什么?

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))

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

🏠结语:

感谢各位能够看到这里:

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Zyo5LiL5ZGo5ZGob3Zv,size_17,color_FFFFFF,t_70,g_se,x_16


原文连接:https://blog.csdn.net/weixin_64471900/article/details/124988686

相关推荐

Flask框架——消息闪现

Python动态属性有什么用

python面向对象编程

Python常用基础语法知识点大全

伙伴云戴志康:如何利用低代码提升研发和IT效能

leetcode 2342. Max Sum of a Pair With Equal Sum of Digits (python)

MongoDB安装教程

python基础语法 - 函数

【毕业设计】深度学习 opencv python 实现中国交通标志识别

Kyligence李栋:从数据湖到指标中台,提升数据分析ROI

LabelImg(目标检测标注工具)的安装与使用教程

承上启下继往开来,Python3上下文管理器(ContextManagers)与With关键字的迷思

Python网页解析库:用requests-html爬取网页

科学计算库Numpy基础&提升(理解+重要函数讲解)

秩和比综合评价法(RSR)详解及Python实现和应用

量化交易初学者指南(下)

深度学习的训练、预测过程详解【以LeNet模型和CIFAR10数据集为例】

Anaconda与Jupyter Notebook入门级详细使用教程

Python图像处理丨三种实现图像形态学转化运算模式

【毕业设计】python+大数据构建疫情可视化分析系统