Rather than just answering what range()
is, below is an attempt at showing how to investigate what something is or isn't in python. We can check two things at each step, the abstract range
, and your initial example assigned to a variable (q is a terrible variable name but useful for brevity):
q=range(0,10,1)
We can also import some help with checking for types and keyword:
import types
import keyword
Now, let's look at your proposed options for "what is it"?
an operator
In python, built-in operators "perform object comparisons, logical operations, mathematical operations and sequence operations" (From the operator module docs ) You can see a long list of operators in the link provided, and range()
isn't there.
a function (or method)
This is one of the more confusing ones at first glance, since googling "python range function" gives thousands of very authoritative hits. Also, range is even listed in the documentation for built-in functions. That said, it's not a function according to those same docs: "class range(start, stop [,step])". We can test this as below, using one of our earlier imports and the pythonic method for checking whether something is what you think it is, 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
a keyword
Thankfully, this is much more straightforward.
import keyword
keyword.iskeyword(range)
False
You can also use print(keyword.kwlist)
to see a list of all the keywords in python
a generator
As mentioned in the comments, while range()
does generate something, it isn't a generator
type object in python. Let's double check:
isinstance(range, types.GeneratorType)
False
isinstance(q, types.GeneratorType)
False
Now we can look at some other options, starting with the docs for range to get an authoritative answer: "The range type represents an immutable sequence of numbers..."
Understandably, this is accurate but hard to parse for someone first learning. The simplest way to check what type an object is (besides using types
and isinstance
) is to just check the type()
. Which gives the charming tautological definition, for example:
type(type)
type
So what is range
, and what is an instance of a range?
type(range)
type
type(q)
range
And, to finish off the last part of your question, is it an object?
Everything in python is an object.
isinstance(q, object)
True
So, from the above, we can deduce that the answer to "what is a range in python?" is: Range is a type, and a defined range is an instance of an object
of the range
type