range函数的返回值究竟是什么?我的一点思考

avatar 2017年4月18日20:39:15 评论 6,564

相信学习过我们零基础学python中range函数那一课的同学们对于range函数并不陌生,如果看到这里你不知道range函数是什么,可以到这里来先学习下:零基础学python 11 快速生成list:range函数

在该节课里面我们认为range函数会生成一个list,但是还记不记得在课上我进行函数返回值的类型测试的时候,却意外的发现类型并不是我们心心念念的list,而是range。课后我对此也抱着深深的疑惑,不知道在座的各位同学们是否有同样的疑问。

因此我查询了好些个资料进行学习和思考,如下是我的一点思考的成果,说出来跟大家分享和讨论一下:

首先教大家一个很简单的函数,在python里面可以轻松的查询一个函数的帮助文档,它就是help()函数。help函数里面的参数填写你要查询的函数名字即可,比如我们现在要查询range函数的帮助,打开我们的IDLE,使用python shell模式输入代码:help(range)回车查看结果:

range函数的返回值究竟是什么?我的一点思考

可以看到返回的结果都是英文的,看帮助也很简单,不懂的放到百度翻译或者谷歌翻译什么的帮你翻译一下看就好了。来让我们来一起解读一下帮助文档中的这一句话:

Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step.

这句话翻译过来的意思就是:

返回一个对象,这个对象产生从开始点(包含)到结束点(不包含),步进值为step的一系列的整数。

看到么?官方的文档只字未提list这个东西,而返回的是一系列的整数。

经过查询资料和思考,我认为range函数真正返回的是一个数字序列而不是列表list,为此我更正一下课程中跟大家讲的知识点。虽然在很多情况下,range函数的返回值的行为怎么看都像一个list,因为我们可以一个个的读取里面的数字,赋值给for循环的变量。但请不要抱有幻想,它确实不是一个列表了。它只是在每次迭代循环的时候返回一个数字,像列表返回元素那样,实际上,在内存中并没有存着一个list对象,这样同时还节省了内存空间。我们可以把这种对象(range对象)成为可迭代对象。如果我们真的不死心,要把range函数返回的东西变成一个真正的列表,我们可以这么写:list(range(5))。这样输出后肯定是一个list了。

好了,本节课我的一点思考就跟大家提到这里。我也在不断学习中,我的思考也不一定是完全准确的。大家如果有任何的想法可以在这篇文章的下方跟帖留言进行讨论。希望我们学得更多,看得更远。

 

以下是我们的视频教程:
在线观看:

 

 

高清源文件下载:

内容已经隐藏,请注册为本站会员后查看

感谢大家的收看,我们下期再见!

avatar

发表评论

您必须才能发表评论!