需要指导以了解如何以多种方式描述 range 或 range()

Need guidance in understanding how range or range() can be described in so many ways

我对编程非常非常陌生,我从 Python 开始。我将大约三十个视频放入一个流行的在线课程中。在最近的教程中,讲师介绍了范围 [例如,范围 (0,10,1)]。短短几分钟,导师将range或range()引用为:

Range 原来也属于 Sequence 数据类型,我想它也可以称为 'object',对吧?我明白同一个“事物”可以根据上下文以不同的方式描述。例如,说我既是加拿大人又是丈夫并不矛盾。问题是在试图理解 Python 中给定术语的作用或状态时,让所有这些类别在我的脑海中保持清晰。是否有一些规则或图表或方法或定义集来理解给定“事物”在 Python 中扮演的所有角色?感谢您的帮助!

下面不只是回答 range() 是什么,而是尝试展示如何调查 python 中的内容。我们可以在每一步检查两件事,抽象 range,以及分配给变量的初始示例(q 是一个糟糕的变量名,但对简洁很有用):

q=range(0,10,1)

我们还可以导入一些检查 types and keyword:

的帮助
import types
import keyword

现在,让我们看看您为“它是什么”提出的选项?

操作员

在python中,内置运算符“执行对象比较、逻辑运算、数学运算和序列运算”(来自the operator module docs)你可以在[=中看到一长串运算符81=] 提供,range() 不存在。

一个函数(或方法)

这是乍一看比较混乱的一个,因为谷歌搜索“python 范围函数”给出了数以千计的非常权威的命中。此外,范围甚至列在内置函数的文档中。也就是说,根据那些相同的文档,它不是一个函数:“class 范围(开始,停止 [,步骤])”。我们可以按如下方式进行测试,使用我们之前的一个导入和 pythonic 方法来检查是否如您所想,isinstance():

isinstance(range, types.FunctionType)
False
isinstance(q, types.FunctionType)
False

isinstance(range, types.BuiltinFunctionType)
False
isinstance(q, types.BuiltinFunctionType)
False

isinstance(range, types.BuiltinMethodType)
False
isinstance(q, types.BuiltinMethodType)
False

一个关键词

谢天谢地,这要简单得多。

import keyword
keyword.iskeyword(range)
False

您还可以使用 print(keyword.kwlist) 查看 python

中所有关键字的列表

一台发电机

如评论中所述,虽然 range() 生成 某些东西,但它不是 python 中的 generator 类型对象。让我们仔细检查一下:

isinstance(range, types.GeneratorType)
False
isinstance(q, types.GeneratorType)
False

现在我们可以看看其他一些选项,从 the docs for range 开始以获得权威答案:“范围 type 代表一个不可变的数字序列...... “

可以理解,这是准确的,但对于初次学习的人来说很难解析。检查对象类型的最简单方法(除了使用 typesisinstance)就是检查 type()。这给出了迷人的重言式定义,例如:

type(type)
type

那么什么是range,什么是范围实例?

type(range)
type

type(q)
range

并且,为了完成您问题的最后一部分,它是一个对象吗? python 中的所有内容都是对象。

isinstance(q, object)
True

所以,从上面我们可以推导出“什么是 python 中的范围?”的答案。 is: Range 是一种类型,定义的范围是 range type

object 的一个实例