博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之yield生成器
阅读量:6272 次
发布时间:2019-06-22

本文共 840 字,大约阅读时间需要 2 分钟。

1、对比range和xrange的区别:

1
2
3
4
>>> print range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print xrange(10)
xrange(10)

range()和xrange()的区别在于,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。

这就类似于yield和return的区别

2、yield和return的区别

当定义一个函数时,如果函数的代码出现了return,则函数立马终止,并返回结果。就算函数下面有多个return,也只会返回第一个return值。

示例:

1
2
3
4
5
6
7
def func():
    
return 
1
    
return 
1
    
return
 
print func()
1

yield的原理:

1
2
3
func1():
    
I func1():
    
I
1
2
3
4
5
1
2
3
 
当第一次循环是,获取值1,此时yield不会退出函数,会记住yield 1这个位置,继续执行函数,下一次就到yield2,在下一次到yield3

return和yield的区别在于,return返回结果后会跳出函数,不再执行函授后面的代码,而yield不会跳出函数,并且会记住函数代码执行位置,下次继续执行。

xrange()的原理:

1
2
3
4
5
6
7
8
9
10
def mrange(arg):
    
seed = 0
    
while 
True:
        
seed =seed + 1
        
if 
seed > arg:
            
return
        
else
:
            
yield seed
for 
in 
mrange(10):
    
print i

每次执行一次循环,会生成一个值。知道seed>arg为止。

本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1827003,如需转载请自行联系原作者
你可能感兴趣的文章
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
送给“正在纠结”、“准备纠结”的前端开发们
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
谈DELL收购EMC
查看>>
Spring配置文件(2)配置方式
查看>>