当前位置:大哥资讯网 > 国际新闻 > 正文

range函数 range函数用法完全解读

导语:原标题:范围函数用法的完整解释迭代器是23种设计模式中最常用的一种。在Python中随处可见。我们经常使用它,但不一定意识到它的存在。在一系列关于迭代器的文章中,我提到了至少23种生成迭代器的方法。有些方法是专门用来生成迭

原标题:范围函数用法的完整解释

迭代器是23种设计模式中最常用的一种。在Python中随处可见。我们经常使用它,但不一定意识到它的存在。在一系列关于迭代器的文章中,我提到了至少23种生成迭代器的方法。有些方法是专门用来生成迭代器的,而另一些方法则是“秘密”使用迭代器来解决其他问题。

在系统学习迭代器之前,我一直以为range方法也是用来生成迭代器的,但是现在突然发现它只生成可迭代对象,而不是迭代器!

所以,我有一个问题:为什么范围不生成迭代器?在寻找答案的过程中,我发现对值域类型有一些误解。因此,本文将对范围有一个全面的了解,并期待与您一起学习和进步。

1.什么是范围?

它的语法:range开始是指计数开始值,默认值为0;Stop指计数结束值,但不包括stop;步长是步长,默认为1,不能为0。range方法生成一个左闭右开的整数范围。

也就是说,作为初级生产者,range方法生产的原材料用处很大,早早将其变成迭代器无疑是画蛇添足的行为。

你认为这个解释合理吗?欢迎和我讨论这个话题。

3.范围类型是什么?

以上就是我对“为什么范围不产生迭代器”的回答。顺着这个思路,我研究了它产生的范围对象,发现这个范围对象也不简单。

第一个奇怪的是,它是一个不可变的序列!我从来没有注意到这一点。虽然我从来没有想过改变范围的值,但这个不变的特性让我很惊讶。

翻阅文档,官方的划分是如此清晰——有三种基本的序列类型:列表、元组和范围对象。

我一直没有注意到这一点。原来范围类型是与列表、元组状态相同的基本序列!我一直记得字符串是一个不可变的序列类型,但我从来没有想过这里还有另一个不可变的序列类型。

范围序列和其他序列类型有什么区别?

常见序列支持12种操作。Range序列只支持其中的10个,不支持加法拼接和乘法重复。

那么问题来了:同一个不可变序列,为什么字符串和元组支持上面两个操作,而范围序列不支持?虽然不可变序列不能直接修改,但是我们可以将它们复制到一个新的序列中进行操作。为什么range对象连这个都不支持?

且看官方文件解释:

问题的关键在于音域序列的模式。仔细想想,其实是代表一个等差数列,拼接两个等差数列或者重复拼接一个等差数列。想想真的不合适,这也是range type不支持这两种操作的原因。由此可以推断,其他修改动作也会破坏等差数列结构,所以不应该全部修改。

4.摘要

回顾全文,我得到了两个不受欢迎的结论:range是一个迭代对象,而不是迭代器;range对象是一个不可变的算术序列。

单纯看结论,可能感觉不到,也可能说没什么大不了的。但是如果我问,为什么range不是迭代器,为什么range是不可变序列?对于这两个问题,你还能回答出一个不言自明的设计思路吗?

由于 range 对象这细微而有意思的特性,我觉得这篇文章写得值了。本文是作为迭代器系列文章的一篇来写的,所以对于迭代器的基础知识介绍不多,另外,还有一种特殊的迭代器也值得单独成文,那就是生成器了。

免责申明:以上内容属作者个人观点,版权归原作者所有,不代表大哥资讯网立场!登载此文只为提供信息参考,并不用于任何商业目的。如有侵权或内容不符,请联系我们处理,谢谢合作!
当前文章地址:https://www.dggaoda.com/news/guojixinwen/300340.html 感谢你把文章分享给有需要的朋友!
上一篇:大鱼mcn 大鱼号mcn是什么 大鱼号mcn需要什么条件 下一篇: 抹茶粉怎么做 抹茶粉是怎么制作的 抹茶粉的原料是什么