我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一日一技:生成器里面的 return 有什么用?

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一日一技:生成器里面的 return 有什么用?

本文转载自微信公众号「未闻Code」,作者kingname 。转载本文请联系未闻Code公众号。

在粉丝群里,有一位同学问了这样一个问题:

  1. def gen_data(num): 
  2.     if num > 10: 
  3.         for i in range(num): 
  4.             yield i 
  5.     else
  6.         return num 
  7.  
  8. generator = gen_data(5) 
  9. for num in generator: 
  10.     print(num) 

当传入的的参数小于等于10 的时候,为什么没有返回这个参数本身?

这道题,当我们传入的参数大于10的时候,能得到符合预期的结果,如下图所示:

但是,当我们传入数据5的时候,我们来看看运行效果:

可以看到,数字5并没有被打印出来,程序直接运行到了最后。

之所以会出现这种情况,是因为这个同学以为,当参数大于10的时候,gen_data(12)返回的是生成器,而当参数不大于10的时候,返回的是一个数字。显然这样的想法是不对的,否则,for num in 10这种语法早就报错了,数字是不能被迭代的。

正确的说法应该是,因为gen_data里面有yield,所以gen_data(参数)返回一个生成器。无论参数传入的是什么,返回的都是生成器。如下图所示:

为了说明为什么传入参数为5的时候,for 循环不执行,我们简化一下代码:

  1. def gen_data(): 
  2.     yield 1 
  3.     yield 2 
  4.     yield 3 
  5.     return 4 
  6.  
  7. generator = gen_data() 
  8. for num in generator: 
  9.     print(num) 

运行效果如下图所示:

可以看到,对于这样一个非常简单的生成器,在 for 循环里面也只是打印了数字123,并没有打印数字4。

关于生成器中的return,我们可以从 Python 官方文档PEP 255 — Simple Generators[1]中找到说明:

return 在生成器中,表示生成器运行完成了,可以结束了。然后生成器会抛出一个StopIteration的异常。而for循环能够检测到这个异常,于是结束循环。所以当我们传入的参数为5的时候,生成器直接运行到了 return,于是它直接就抛出StopIteration,于是 for 循环检测到这个异常就结束了。

在生成器里面的return只是一个结束标志,它不会把后面写的值返回给调用者。这跟函数里面的return语句是不一样的。

[1]PEP 255 — Simple Generators: https://www.python.org/dev/peps/pep-0255/#specification-return

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一日一技:生成器里面的 return 有什么用?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一日一技:生成器里面的 return 有什么用?

return 在生成器中,表示生成器运行完成了,可以结束了。然后生成器会抛出一个StopIteration的异常。而for循环能够检测到这个异常,于是结束循环。

阿里云服务器有什么用啊多少钱一个月的

阿里云服务器有很多用途和配置方式,不同配置方式和服务的价格也会有所不同。以下是一些价格比较普遍的选项和配置方式:虚拟主机:价格便宜,一般为几百元到上千元不等,支持多种主机服务,例如负载均衡、防DDOS攻击、数据库备份等;云服务器:价格昂贵,根据容量、带宽、资源等不同,价格从几千元到几十万元不等,可以支持多种云服务,例如数据备份、容灾备份、网络加速等等;VPS:价格较高,可容纳数量较少,一
2023-10-26

阿里云服务器有什么用啊多少钱一个月的费用

阿里云服务器有很多用处,例如:数据存储:阿里云服务器可以将数据分发到其他云服务器上,这些服务器可以提供高效的存储能力来存储大量的数据,例如图片、视频、音频等数据。数据加密:阿里云服务器可以通过加密技术来保护用户的数据,这有助于保护企业的数据安全。云监控:阿里云服务器可以监控服务器的运行状态,例如CPU使用率、内存使用量等,及时发现问题并进行处理。云备份:如果用户的数据需要备份到其他云服
2023-10-26

阿里云服务器有什么用啊多少钱一个月的电脑

阿里云服务器有很多不同的产品线和型号,价格也会有所不同。以下是一般情况下的阿里云服务器价格,仅供参考。云服务器1x:每个月的租用价格在$500-$1200美元之间,根据服务器的配置和大小而异。阿里云虚拟主机VPS:每个月的租用价格在$200-$1200之间,根据服务器的配置和大小而异。阿里云云服务器1+1:每个月的租用价格在$300-$400之间,根据服务器的配置和大小而异。除此之外
2023-10-26

阿里云服务器有什么用啊多少钱一个月的费用是多少

阿里云服务器有很多用处和功能,以下是一些常见的用途和费用:企业云服务器:提供高可靠性的云计算服务,帮助企业快速上云和扩展其业务规模。个人云服务器:提供便捷的云计算服务,如快速部署和管理服务器、存储、网络等。游戏云服务器:提供高性能云计算服务,满足游戏用户快速、高效、稳定的游戏体验。CDN云服务器:提供海量的网络存储和内容分发服务,支持用户访问网站、应用程序和视频等。云加速云服务器:提供高性能云计算服务,包括负...
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录