The Python `range`

type generates a sequence of integers by defining a start and the end point of the range. It is generally used with the `for`

loop to iterate over a sequence of numbers.

`range()`

works differently in Python 2 and 3.

In Python 2, there are two functions that allow you to generate a sequence of integers, `range`

and `xrange`

. These functions are very similar, with the main difference being that `range`

returns a list, and `xrange`

returns an xrange object.

In Python 3, the `xrange`

function has been dropped, and the `range`

function behaves similarly to the Python 2 `xrange`

. Python 3 `range`

is not a function but rather a type that represents an immutable sequence of numbers.

In this article, we will cover the basics of the Python 3 `range`

type.

## Python `range()`

syntax

The `range`

constructor takes the following forms:

```
range(stop)
range(start, stop[, step])
```

Copy

The arguments provided to the `range`

constructor must be integers. Floating numbers and other types are not allowed.

`range`

takes one required and two optional arguments. It returns a range object that represents the given range and generates the numbers on demand.

## Python `range(stop)`

When only one argument is given, `range`

returns a sequence of numbers, incremented by `1`

, starting from `0`

to `stop - 1`

.

Here’s the range type in action:

```
for i in range(5):
print(i)
```

Copy

The generated sequence of numbers starts from `0`

and ends with `4`

(5-1):

```
0
1
2
3
4
```

If the argument is `0`

or a negative integer `range`

returns an empty sequence:

```
print(list(range(-5)))
```

Copy

We’re converting the range object to a list because range does a lazy evaluation of the integer sequence. The output is an empty list:

```
[]
```

## Python `range(start, stop)`

When two arguments are provided, `range`

returns a sequence of numbers, incremented by `1`

, starting from `start`

to `stop - 1`

.

Here is an example:

```
for i in range(3, 5):
print(i)
```

Copy

```
3
4
```

The `stop`

argument must be greater than `start`

. Otherwise, the sequence is empty:

```
print(list(range(5, 3)))
```

Copy

```
[]
```

You can use `0`

, positive and negative integers as arguments:

```
print(list(range(-5, -3)))
```

Copy

```
[-5, -4]
```

```
print(list(range(-3, 0)))
```

Copy

```
[-3, -2, -1]
```

## Python `range(start, stop, step)`

When three arguments are given, `range`

returns a sequence of numbers, incremented or decremented by `step`

, starting from `start`

to `stop - 1`

.

If `step`

is positive, `range`

returns a sequence that increments:

```
for i in range(0, 26, 5):
print(i)
```

Copy

```
0
5
10
15
20
25
```

When incrementing, the `stop`

argument must be greater than `start`

. Otherwise, the sequence is empty.

If `step`

is negative, `range`

returns a sequence that decrements:

```
for i in range(20, 4, -5):
print(i)
```

Copy

```
20
15
10
5
```

When decrementing, the `stop`

argument must be less than `start`

. Otherwise, the sequence is empty.

If `step`

is `0`

a ValueError exception is raised:

```
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: range() arg 3 must not be zero
```

## Conclusion

The Python `range`

type allows you to generate a sequence of integers. It is mostly used in `for`

loops.

If you have any questions or feedback, feel free to leave a comment.