Python工程师面试高频题:return 和 yield之间到底有啥区别?

Python的return和yield,哪个是你的菜? 在Python中,return语句用于从函数中输出数据到调用者。当函数执行到return时,它会立即停止执行当前函数并返回指定的值 阅读详情

在编程语言 Python 中,yield 和 return 是两个在函数中用于返回值的关键字,但它们在功能和使用场景上有着本质的区别。理解这两者的区别,对于编写更高效、更灵活的 Python 代码至关重要。

看图说话

首先我们来看下面这张图片,该图片比较生动形象地描绘了 return和 yield 之间的区别,

在这里插入图片描述

想象你走进一个美食节,这里有两个卖Takoballs(章鱼丸子)的摊位,一个是“Return Takoball”,另一个是“Yield Takoball”。你的肚子咕咕作响,你迫不及待想要品尝这些美味。

在“Return Takoball”摊位,客户下单后,摊主告诉客户必须等他煮完所有的Takoballs后,才能拿到他们点的数量。这就像传统的函数运行方式:你不得不等待整个过程完成后才能获得你要的东西,这个过程一旦开始就不能中断,直到所有结果都准备好,一次性返回。

然而,在“Yield Takoball”摊位,情况就完全不同了。这位摊主每做好一个Takoball就会递给客户一个,客户不需要等待所有的Takoballs都煮好。这正体现了Python当中生成器的特性:它可以产生一个结果,然后暂停,等待下一次请求时再继续从上一次停下的地方开始。这使得客户可以很快得到第一个Takoball,并且摊主可以在为一个客户服务的同时,开始准备下一个客户的订单。

摊位之间的这种对比,巧妙地说明了在处理需要逐步产生和消费数据的任务时,yield能够提供更高的效率和更好的用户体验。它不仅节省了等待时间,还提高了处理过程的灵活性。

漫画的最后部分展示了结果:return 摊位的客人还在耐心等待,而 yield 摊位的客人们已经快乐地吃着Takoballs了。摊主依然在继续工作,准备着后续的订单,无需让任何人等得太久。

通过对图片的描述和介绍,是不是对 return和 yield 之间的区别有了更加直观的理解呢?接下来我们通过代码来进一步的演示

代码演示

我们先来创建一个含有 return 的函数,代码如下

def add20(x):
  return x + 20

x = add20(4)        # x = 24

出来的结果是24,那么在这个章鱼丸子的例子当中,我们也可以来写一个函数

def get_takoballs(orders):
  output = []
  for order in orders:
    output.append(f'{order} takoballs')
  return output

y = get_takoballs([4,6,8])

出来的结果是

# y = ['4 takoballs', '6 takoballs', '8 takoballs']

然后我们来看一下包含了 yield 的函数,代码如下

def testfunction():
  yield 4
  yield 5
  yield 6

for n in testfunction():
  print(n)

出来的结果是

# 4
# 5
# 6

yield 关键字与 return 相似,都用于指定函数的输出值。不过,两者的区别在于:一个使用 yield 的函数可以返回多个值,而不是单一的输出。它允许函数产生一系列值,每次一个,而不是在函数结束时一次性返回所有值。

当函数执行到 yield 语句时,它会返回后面的值给调用者,并且暂停执行,但并不是完全停止。这个函数的状态(包括局部变量和指令指针等)会被保留,使得函数可以在下一次通过迭代器被调用时从上一次暂停的地方继续执行。

这意味着,通过 yield,函数可以在中途返回一个结果,并且稍后可以从停止的地方继续,以便返回更多的结果。这种行为创建了一个生成器(generator),它可以用在循环或迭代器表达式中,每次迭代都可以从生成器中获取一个值,直到没有更多值可供产生。

def get_takoballs(orders):
  for order in orders:
    yield f'{order} takoballs'

for food in get_takoballs([4, 6, 8]):
  print(food)

# 4 takoballs
# 6 takoballs
# 8 takoballs

那要是我们有1000名顾客在等待呢,我们来看一下含有 return 的函数和包含 yield 的函数会有哪些不同

orders = [4, 6, 8, .....]#1000名顾客想要的数量

def return_stall(orders):
  # 将所有的1000名顾客的要的量都给处理好
  # 最后输出结果
  output = []
  for order in order:
    output.append(f'{order} takoballs')
  return output

def yield_stall(orders):
  # 处理一名顾客的量之后就立马输出
  # 重复1000次直到结束
  for order in orders:
    yield f'{order} takoballs'

对于 return_stall 函数,它代表了传统的函数行为,类似于漫画中的 return 摊位。如果有 10000 个订单需要处理,return_stall 函数会先处理完所有这些订单,直到最后一个订单也完成后,才会将结果一次性返回。在这种情况下,第一个顾客需要等待所有的 10000 个订单全部煮好后,他才能拿到自己的食物。这意味着即便他的订单可能是第一个完成的,他也必须等待其他所有人的订单都完成后,才能得到自己的结果。

相比之下,yield_stall 函数的行为就像漫画中的 yield 摊位。这个函数一次处理一个订单,每处理完一个订单,就立即将结果(或者说是食物)“交付”(yield)给对应的顾客。在这个例子中,第一个顾客只需要等待自己的订单完成。一旦他的 takoballs 做好了,他就可以立即接过它们,而不必关心其他顾客的订单是否完成。这显著提高了效率,尤其是对于那些订单处理速度相对较快的顾客来说。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

Python面试八股文:从核心原理到高频考点全解析 在编程语言的学习与面试准备中,理解核心概念与底层原理是构建扎实技术能力的基础。Python作为一门动态、解释型语言,其独特的对象模型、内存管理机制和并发处理方式,决定了开发者在实际工程中的编码效率与系统性能。从变量与对象模型、作用域规则,到迭代器与生成器的惰性计算原理,这些基础概念共同构成了Python高效编程的技术价值。深入掌握这些原理,能够帮助开发者在处理数据结构、设计函数与装饰器、实现面向对象编程时,做出更优的工程决策。特别是在应对I/O密集型或CPU密集型任务时,对GIL、多线程、多进程及异步编程a 阅读详情

相关推荐

Python工程师面试必考:30个基础题深度解析与实战应用

在Python编程中,理解语言的核心机制是构建扎实技术基础的关键。从内存管理机制入手,Python通过引用计数、标记清除和分代回收实现自动垃圾回收,这直接影响了可变对象与不可变对象的行为差异。深入掌握这些原理,对于编写高效、健壮的代码至关重要,尤其是在处理并发编程和性能优化时。Python的GIL(全局解释器锁)机制决定了多线程在CPU密集型任务中的局限性,但在I/O密集型场景下,结合生成器表达式和装饰器等高级特性,依然能大幅提升程序效率。这些基础概念不仅是面试中的高频考点,更是日常开发中实现内存优化、设计

weixin_30655569的博客 278

Python中的yieId,比return更高效!

在这个例子中,我们创建了一个名为process_large_file的函数,它使用"yield"逐行返回文件内容,这样可以有效减少读取大文件时的内存占用。从大文件中逐行读取数据时,可以逐步读出,而不需要直接将整个大文件全部存入内存,通过使用"yield"可以有效减少内存占用。**动手实践:**Yield示例代码,处理大量文件数据时,我们可以使用"yield"来逐行读取,而不是一次性加载整个文件。在不确定数据量或数据量非常大的情况下,"yield"可以按需生成数据,而不是一次性加载到内存中。

qq_56262770的博客 947

软件测试面试全攻略:100道高频真题解析

软件测试是确保软件质量的关键环节,涉及从单元测试到系统测试的多层次验证。其核心原理是通过系统化的方法评估软件是否符合需求,从而提前发现潜在风险。在工程实践中,测试左移和持续测试流水线等策略能显著提升效率,例如通过自动化测试实现90%以上的基础层覆盖率。测试工程师需要掌握Linux命令、SQL优化等硬技能,同时具备接口自动化框架设计等实战能力。本文整理了测试面试中的100道高频问题,涵盖测试理论、自动化实践、性能优化等关键领域,特别针对电商、金融等典型场景提供解决方案。

weixin_30292843的博客 295

Python——进程与线程以及yield与return的区别

一、进程与线程        1. 一个程序至少有一个进程,一个进程至少有一个线程        2. 线程的划分尺度小于进程,使得多线程程序的并发性高        3. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率       4. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应...

ljj950408的博客 1118

2023年自动化测试面试高频题深度解析:从pytest框架到实战设计

自动化测试是现代软件工程中提升测试效率、保障软件质量的关键实践。其核心原理在于通过脚本模拟用户操作,自动执行测试用例,从而替代重复性手工测试,实现快速回归验证。在技术价值层面,自动化测试不仅显著缩短测试周期,降低人力成本,还能提高测试覆盖的准确性和一致性,是持续集成与持续交付(CI/CD)流程中不可或缺的一环。常见的应用场景包括接口回归测试、核心业务流程验证以及每日构建的冒烟测试等。本文聚焦于自动化测试领域广泛使用的pytest框架,深入剖析其fixture机制、参数化测试等核心特性,并结合测试框架设计、C

weixin_34321753的博客 384

2025字节测试面试全攻略:高频考点与实战应对思路

软件测试从功能验证走向全栈质量保障,字节跳动等大厂对测试工程师的要求已覆盖用例设计、接口自动化、性能排查与算法手撕。理解HTTP协议、pytest框架、Linux命令等底层原理,是构建自动化测试体系与高效排查线上问题的基础。从等价类、边界值等经典方法到缓存穿透、弱网模拟等实战场景,测试人员需要将技术能力转化为业务价值。本文围绕2025年字节测试面试高频考点,系统梳理答题框架与避坑思路,助力候选人高效备战。

cqwmy840702的博客 379

6. 深入解析 Python 生成器函数:yield 与 return 的对比及应用

生成器函数是 Python 中使用 `yield` 关键字的特殊函数,返回一个生成器对象,能够暂停和恢复执行,实现惰性求值和节省内存。与使用 `return` 的普通函数相比,生成器函数适合处理大数据和流式数据,多次产出值且按需生成。`yield` 和 `return` 的对比显示,生成器函数在控制复杂迭代逻辑、减少内存消耗和实现协程等应用中有显著优势。

拾工 790

Python面试核心30问:从原理到实战的深度解析与高分策略

在Python编程与软件工程领域,扎实的语言基础是开发者构建复杂应用、进行高效问题解决的基石。理解核心概念如**内存管理**、**并发模型**和**对象模型**的原理,是深入掌握这门语言的关键。Python通过引用计数与循环垃圾收集器实现自动内存管理,而全局解释器锁(GIL)则定义了其独特的并发特性,深刻影响着多线程程序的设计。这些底层机制直接决定了代码的性能、资源利用率和可扩展性。在技术面试场景中,面试官常通过基础问题考察候选人对这些原理的认知深度、问题解决能力以及知识体系的连贯性。本文聚焦Python工

weixin_34384557的博客 326

Python yield

yield与return的用法区别

weixin_45548112的博客 338

2026年Python开发工程师常见面试简答题

本文总结了Python面试中的30个常见问题及参考答案,涵盖基础语法、数据结构、函数特性、面向对象、并发编程等核心知识点。主要内容包括:1)list与tuple的区别、可变与不可变对象;2)函数相关概念如闭包、装饰器、生成器;3)面向对象的三大特性及方法解析顺序;4)异常处理、垃圾回收机制;5)并发编程中的GIL问题及多线程/多进程应用场景。这些问题既考察基础语法掌握程度,也检验对Python特有机制的理解,是Python开发者面试准备的重要参考资料。

不务正业的猿 302

2026年Python开发工程师常见面试选择题

Python核心知识点摘要 数据结构特性 list可变,tuple不可变 字典基于哈希表实现,键必须可哈希 字符串是不可变对象 关键操作符 ==比较值,is比较对象标识 yield将函数转为生成器 *args接收位置参数(元组),**kwargs接收关键字参数(字典) 函数特性 默认参数在定义时确定 lambda适合简单匿名函数 filter()适合列表筛选 面向对象 三大特性:封装、继承、多态 实例方法用self,类方法用cls 多继承要注意MRO顺序 高级特性 生成器节省内存,按需产生数据 with自动

不务正业的猿 193

【Python】Python工程师面试高频题:return 和 yield之间到底有啥区别?

在编程语言 Python 中,yield 和 return 是两个在函数中用于返回值的关键字,但它们在功能和使用场景上有着本质的区别。理解这两者的区别,对于编写更高效、更灵活的 Python 代码至关重要。看图说话首先我们来看下面这张图片,该图片比较生动形象地描绘了 return和 yield 之间的区别,想象你走进一个美食节,这里有两个卖Takoballs(章鱼丸子)的摊位,一个是“Return...

fengdu78的博客 114

Wine7.22实战:如何在Ubuntu上完美运行通达信和微信(附字体配置技巧)

本文详细介绍了如何在Ubuntu系统上使用Wine7.22版本,完美运行通达信和微信这两款Windows专属软件。通过选择稳定的Wine7.22版本、利用现成的兼容容器,并重点解决了中文字体渲染的核心难题,提供了从环境搭建、字体配置到软件安装调优的一站式实战指南,帮助用户在Linux环境下无缝使用关键金融与通讯工具。

weixin_29280657的博客 549

Python面试全攻略:从基础到高阶技巧解析

Python作为动态类型语言,其内存管理和数据类型系统是理解语言特性的基础。通过小整数池和字符串驻留等优化机制,Python在解释器层面实现了性能提升。在实际开发中,深浅拷贝的区别、函数参数传递机制等核心概念直接影响代码质量。上下文管理器和装饰器等高级特性,则体现了Python在资源管理和代码复用方面的设计哲学。这些技术广泛应用于Web开发、数据分析和自动化测试等领域。本文结合面试高频问题,深入解析Python从基础语法到元编程的完整知识体系,特别针对GIL锁、协程并发等难点提供实战解决方案。

cneo2012的博客 382

Solidworks在Windows 11上安装失败?这里有解决方案

通过上述步骤,你应该能够解决在Windows 11上安装Solidworks时遇到的问题。这个方法通过调整注册表的设置,提高了安装程序的权限,从而有效避免了安装过程中的权限障碍。当然,每个系统的具体情况可能有所不同,如果在尝试上述方法后仍然无法解决问题,建议联系Solidworks的技术支持团队,获取更专业的帮助。希望本文能够对你有所帮助,祝你工作顺利,设计无忧!

nntxthml的博客 4909

从零做出可发布的2D冒险游戏!Unity全流程实战指南:从资源搭建到打包发布,新手也能跟着做

项目配置→资源导入→核心模块开发→关卡设计→调试→打包发布;玩家控制→敌人AI→道具系统→UI系统→游戏管理器→音效系统;新手开发重点:先实现核心玩法(移动、跳跃、攻击),再补充UI、音效、存档等辅助功能;调试是关键:每实现一个功能就测试,避免最后一堆bug难以定位。从零做一款完整的2D冒险游戏,能快速提升你的Unity综合能力——不仅能掌握C#编程、2D物理、UI系统,还能理解游戏开发的完整流程。先做出基础版,再慢慢迭代优化,你会发现游戏开发并没有想象中那么难。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1176

西安12k测试面试:自动化测试高频题全解析

软件测试面试中,自动化测试能力已成为中级岗位的核心考察点。从接口自动化到UI自动化,测试框架(如Selenium、pytest)的选型与落地不仅关乎脚本编写,更涉及PO模式、显式等待、数据隔离、CI集成等工程实践。理解自动化测试的底层原理,如定位策略、断言设计、失败排查,能帮助测试人员在回归测试、接口验证等高频场景中提升效率与稳定性。本文围绕12k软件测试岗位面试,梳理自动化测试高频问题,从框架选型到用例设计,从稳定性排查到工程化价值,提供结构化答题思路与实战方法,助力面试者展现真正的自动化落地能力。

weixin_34396103的博客 405

PCB设计教程【入门篇】——PCB设计基础-PCB构成与组成

本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理。

2501_91732643的博客 7634

软件测试面试攻略:高频题、答题思路与实战演练

软件测试作为保障软件质量的核心环节,其核心原理是通过系统化的验证与确认来发现缺陷、评估风险。测试理论、用例设计、Linux/MySQL操作、接口与自动化测试、性能分析等能力,构成了测试工程师的基本功。在实际工程中,掌握这些技术不仅能高效排查线上问题,更能从用户视角持续优化产品体验。无论是功能测试、接口验证还是自动化回归,都离不开对HTTP协议、数据状态、异常场景的深入理解。针对软件测试面试中常见的高频题目,本文梳理了从基础理论到项目实战的完整知识框架,围绕测试用例设计、数据库操作、接口断言、性能指标等关键考

weixin_33946605的博客 315

AVL-Excite新手必看:5步搞定发动机阀系系统建模(附B站视频教程)

本文为AVL-Excite新手提供发动机阀系系统建模的5步详细指南,涵盖软件环境搭建、基本结构建立、关键参数设置、仿真分析及常见问题排查。通过清晰的步骤说明和实用技巧,帮助工程师快速掌握建模方法,并附有精选B站视频教程链接,便于实践学习。

weixin_29305313的博客 504

HBuilderx连接微信开发者工具

系列文章目录 文章目录系列文章目录前言一、环境1.HBuilerx 工具2.微信开发者工具二、关联微信开发者工具1.HBuilderx新建项目2.关联微信开发者工具3.运行微信小程序出现异常解决方法3.最终效果总结 前言 使用HBuilderx工具关联微信开发者工具,进行小程序开发 提示:以下是本篇文章正文内容,下面案例可供参考 一、环境 1.HBuilerx 工具 HBuilderx 2.微信开发者工具 微信开发者工具 二、关联微信开发者工具 1.HBuilderx新建项目 2.关联微信开发者工具

拥有必珍惜 3074

2026软件测试面试高频题汇总:接口测试、自动化测试与项目实战

软件测试是保障软件质量的关键环节,贯穿需求分析、用例设计、接口验证到系统上线的全流程。随着业务复杂度提升,接口测试与自动化测试已成为测试工程师的核心技能门槛,而性能测试指标、数据库SQL、Linux日志排查等实践能力也在面试中高频出现。从基础理论到场景化追问,面试官更关注答题结构、项目真实性与复盘思维。本文整合2026年软件测试面试高频题,覆盖测试基础、用例设计方法、接口与自动化框架、性能调优、数据库及AI测试新趋势,并结合STAR法则梳理项目应答思路,帮助求职者建立系统化备考路径,在技术深度与表达逻辑上同

weixin_34026276的博客 513

SpringBoot4.0+JDK25+GraalVM实战:云原生新纪元,微服务性能翻倍的落地指南

三者的组合不是偶然,而是“框架优化+JDK升级+虚拟机革新”的必然结果——SpringBoot4.0完善了对GraalVM原生镜像的支持,JDK25强化了云原生与AOT编译能力,GraalVM则提供了极致的启动速度和资源利用率,三者协同,刚好命中云原生微服务的核心痛点。SpringBoot4.0+JDK25+GraalVM的组合,不是简单的版本升级,而是云原生微服务的一次性能革命。

2601_94871597的博客 1141
上一篇: Python中最好用的6个地图可视化库
下一篇: 如何安全运行别人上传的Python代码?
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值