Python/Учебник Python 2.6: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 1365:
=== Кортежи и последовательности ===
 
Мы видели, что списки и строки поддерживают много привычных свойств, таких как индексирование и операция получения срезов. Существует два подвида типов данных ''последовательность'' (<tt>sequence</tt>) (см. [[Справочник по библиотеке Python 2.6#Последовательности|Справочник по библиотеке  — Последовательности]]), и поскольку Python  — развивающийся язык, со временем могут быть добавлены другие последовательные типы данных. Итак, существует также и другой, достойный рассмотрения, стандартный последовательный тип данных: ''кортеж''.
 
Кортеж состоит из некоторого числа значений разделённых запятыми, например:
Строка 1379:
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))</source>
 
Как видите, кортежи на выводе всегда заключены в скобки, таким образом вложенные кортежи интрепретируются корректно; они могут быть введены и с обрамляющими скобками и без, тем не менее в любом случае скобки чаще всего необходимы (если кортеж  — часть более крупного выражения).
 
Кортежи можно использовать в различных целях. Например: <code>(x, y)</code> пары координат, записи о рабочих из базы данных, и так далее. Кортежи, как и строки, неизменяемы: невозможно присвоить что-либо индивидуальным элементам кортежа (однако, вы можете симулировать большинство схожих эффектов за счёт операций срезов и конкатенации). Также можно создать кортежи, содержащие изменяемые объекты, такие как списки.
 
Определённая проблема состоит в конструировании кортежей, состоящих из нуля или одного элемента: в синтаксисе языка есть дополнительные хитрости, позволяющие достигнуть этого. Пустые кортежи формируются за счёт пустой пары скобок; кортеж с одним элементом конструируется за счёт запятой, следующей за числом (единственное значение не обязательно заключать в скобки). Необычно, но эффективно. Например:
 
<source lang="python">>>> empty = ()
Строка 1400:
Такое действие называется, довольно удачно, ''распаковкой последовательности'' (<tt>sequence unpacking</tt>). Для распаковки на левой стороне требуется список переменных с количеством элементов равным длине последовательности. Обратите внимание, что множественное присваивание на самом деле является лишь комбинацией упаковки кортежа и распаковки последовательности.
 
Здесь есть некоторая ассиметрияасимметрия: упаковка нескольких значений всегда создаёт кортеж, а распаковка работает для любой последовательности.
 
=== Наборы ===