87 lines
4.0 KiB
Markdown
87 lines
4.0 KiB
Markdown
---
|
||
title: The Python Range
|
||
localeTitle: Диапазон Python
|
||
---
|
||
## Диапазоны Python
|
||
|
||
Вместо того, чтобы быть функцией, диапазон фактически является [неизменным типом последовательности](https://docs.python.org/3/library/stdtypes.html#immutable-sequence-types) и обычно используется для циклического цикла определенного цикла для циклов.
|
||
|
||
**Создание:**
|
||
|
||
`ranges` создаются с использованием конструктора `range` . Параметры для конструктора:
|
||
|
||
* `start` : Включить первое значение диапазона (необязательно целое, по умолчанию - 0).
|
||
* `stop` : Исключительное значение остановки, диапазон останавливается, когда это значение или больше будет предоставлено (требуется целое число).
|
||
* `step` : сумма добавлена к текущему значению, чтобы получить следующее значение (необязательное целое, по умолчанию - 1).
|
||
|
||
```python
|
||
>>> range(10) # Only the stop parameter is required.
|
||
range(0, 10)
|
||
>>> range(0, 10) # Default for start parameter is 0.
|
||
range(0, 10)
|
||
>>> range(0, 10, 1) # Default for step is 1\. Start parameter is required if
|
||
step is needed.
|
||
range(0, 10)
|
||
```
|
||
|
||
**Примеры:**
|
||
|
||
Поскольку `ranges` являются итерабельными, они могут быть переданы в конструкторы `list` и `tuple` для создания этих типов последовательностей. Используя этот факт, мы можем представить несколько примеров:
|
||
|
||
```python
|
||
>>> list(range(10)) # range as argument for list constructor.
|
||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||
>>> tuple(range(10)) # range as argument for tuple constructor.
|
||
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
|
||
```
|
||
|
||
`ranges` нулевой длины:
|
||
|
||
```python
|
||
>>> list(range(10, 0)) # start greater than stop with postive step.
|
||
[]
|
||
>>> list(range(10, 10)) # start equal to stop with postive step.
|
||
[]
|
||
>>> list(range(10, 10, -1)) # start equal to stop with negative step.
|
||
[]
|
||
>>> list(range(0, 10, -1)) # start less than stop with negative step.
|
||
[]
|
||
```
|
||
|
||
`ranges` с шаговыми аргументами:
|
||
|
||
```python
|
||
>>> list(range(0, 10, 2)) # next value would be 10, stops at 8.
|
||
[0, 2, 4, 6, 8]
|
||
>>> list(range(0, 10, 3)) # next value would be 12, stops at 9.
|
||
[0, 3, 6, 9]
|
||
>>> list(range(0, 10, 4)) # next value would be 12, stops at 8.
|
||
[0, 4, 8]
|
||
>>> list(range(10, 0, -1)) # negative step makes decreasing ranges.
|
||
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
|
||
>>> list(range(-5, -30, -3)) # negative integers are valid arguments.
|
||
[-5, -8, -11, -14, -17, -20, -23, -26, -29]
|
||
```
|
||
|
||
**Выгоды:**
|
||
|
||
Преимущество использования `range` заключается в том, что независимо от того, насколько велика указанная область, для хранения `range` требуется только небольшой объем памяти, значения для начала, остановки и шага. Отдельные значения `ranges` рассчитываются на итерации.
|
||
|
||
```python
|
||
>>> import sys
|
||
>>> a_range = range(1000000)
|
||
>>> a_list = list(a_range)
|
||
>>> a_tuple = tuple(a_range)
|
||
>>> sys.getsizeof(a_range)
|
||
48
|
||
>>> sys.getsizeof(a_list)
|
||
9000112
|
||
>>> sys.getsizeof(a_tuple)
|
||
8000048
|
||
```
|
||
|
||
### Больше информации:
|
||
|
||
[Python Doc - Диапазоны](https://docs.python.org/3/library/stdtypes.html#ranges)
|
||
|
||
**TODO: `ranges` методов выполняются и не реализуются** |