5.3. Кортежи и последовательности

Мы видели, что списки и строки имеют много общих свойств, такие как индексирование и операция взятия среза. Они являются двумя примерами типа данных последовательностей (см. Sequence Types — list, tuple, range (docs.python.org/3/library/stdtypes.html#typesseq)). Поскольку Python - развивающийся язык, другие типы данных последовательностей могут быть добавлены. Существует также другой стандартный тип данных последовательностей: tuple (кортеж).

Кортеж состоит из ряда значений, разделенных запятыми, например:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t

5.2. Оператор del

Существует способ удалить элемент из списка, передав его индекс вместо его значения: через оператор del. Это отличается от метода pop(), который возвращает значение. Также оператор del может быть использован для удаления среза из списка или очистки всего списка (что мы делали раньше присвоением пустого списка срезу). Например:

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

del также может быть использован для полного удаления переменных:

>>> del a

5. Структуры данных. Списки

Эта глава более подробно описывает некоторые моменты, с которыми вы уже знакомы, и также добавляет некоторые новые факты.

5.1. Подробнее о списках

Списковый тип данных имеет несколько больше методов. Здесь все методы списковых объектов:

list.append(x)
Добавляет элемент в конец списка. Эквивалентно a[len(a):] = [x].

list.extend(L)
Расширяет список добавлением всех элементов переданного списка. Эквивалентно a[len(a):] = L.

list.insert(i, x)

Программа "Депозиты"

Данная программа хранит информацию по открытым депозитам в разных банках в списке. Каждый элемент этого списка (вложенный список) - это информация по одному вкладу. Элемент включает название банка (по ключу из словаря, содержащего названия), дату открытия и закрытия вклада, сумму вклада и процентную ставку. Таким образом, список вкладов организован по типу таблицы базы данных.

Даты хранятся в специальном формате (класс datetime.date модуля datetime). С объектами этого класса можно выполнять "арифметические" операции. Это используется при нахождении количества дней вклада.

4.8. Интермеццо: стиль кодирования

Теперь, когда вы собираетесь писать более длинный, более сложный код на Python, хорошее время, чтобы поговорить о стиле кодирования. В большинстве языков можно писать (или более правильно, форматировать) в различных стилях; некоторые из них более читабельные, чем другие. Создание кода более читаемого для других - всегда хорошая идея, и принятый хороший стиль кодирования чрезвычайно помогает этому.

4.7. Подробнее об определении функций

Также возможно определять функции с переменным числом аргументов. Есть три формы, которые могут быть комбинированы.

4.7.1. Значения аргументов по умолчанию

Наиболее полезная форма - это указать значение по умолчанию для одного или более аргументов. Это создает функцию, которая может быть вызвана с меньшими аргументами, чем это определено по умолчанию. Например:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
    while True:
        ok = input(prompt)
        if ok in ('y', 'ye', 'yes'):
            return True

4.6. Определение функций

Мы можем создать функцию, которая выводит ряд Фибоначчи до произвольной границы:

>>> def fib(n):    # выводит ряд Фибоначчи до n
...     """Печатает ряд Фибоначчи вплоть до n."""
...     a, b = 0, 1
...     while a < n:
...         print(a, end=' ')
...         a, b = b, a+b
...     print()
...
>>> # Теперь вызовем функцию, которую мы только что определили:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

4.5. Операторы pass

Оператор pass ничего не делает. Он может быть использован, когда синтаксически требуется какое-либо выражение, но программа не требует действия. Например:

>>> while True:
...     pass  # Занят ожиданием прерывания с клавиатуры (Ctrl+C)
...

Обычно это используется при создании очень маленьких классов:

>>> class MyEmptyClass:
...     pass
...

4.4. Операторы break, continue и условие else после цикла

Оператор break, как и в C, прерывает выполнение цикла for или while (только самого внутреннего, где он находится).

Операторы цикла могут иметь оговорку else; она выполняется, когда цикл завершается из-за исчерпания списка (с for) или когда условие становится ложным (с while), но не в том случае, когда цикл прерван оператором break. Это подтверждается следующим циклом, который ищет простые числа:

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:

4.3. Функция range()

Если вам надо перебрать последовательность чисел, пригодится встроенная функция range(). Она генерирует арифметические прогрессии:

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

Заданная конечная точка никогда не входит в генерируемую последовательность; range(10) генерирует 10 значений, индексируемые как обычная последовательность длинной 10. Есть возможность установить другое число в качестве начала диапазона или указать другое приращение (даже отрицательное; иногда приращение называют "шагом"):

range(5, 10)
   от 5 к 9
 
range(0, 10, 3)

Syndicate content