Наоми Седер - Python. Экспресс-курс
- Название:Python. Экспресс-курс
- Автор:
- Жанр:
- Издательство:Питер
- Год:2019
- ISBN:978-5-4461-0908-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Наоми Седер - Python. Экспресс-курс краткое содержание
Наоми Седер рассказывает не только об основных особенностях языка Python, но и его объектно-ориентированных возможностях, которые появились в Python 3. Данное издание учитывает все изменения, которые произошли с языком за последние 5 лет, а последние 5 глав рассказывают о работе с большими данными.
Python. Экспресс-курс - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
>>> shallow[1] = 2
>>> shallow
[[0], 2]
>>> original
[[0], 1]
>>> shallow[0][0] = 'zero'
>>> original
[['zero'], 1]
Глубокая копия не зависит от оригинала, и из-
менения в ней не отражаются на исходном
списке:
>>> deep[0][0] = 5
>>> deep
[[5], 1] Рис. 5.3. При поверхностном
>>> original копировании не копируются
[['zero'], 1] вложенные списки
Это поведение присуще всем остальным вложенным объектам в изменяемых спи-сках (например, словарях).
Итак, теперь вы знаете, что можно сделать при помощи списков, и мы можем об-ратиться к кортежам.
ПОПРОБУЙТЕ.САМИ:.КОПИРОВАНИЕ.СПИСКОВ Имеется следующий список: x = [[1, 2,3], [4, 5, 6], [7, 8, 9]] . Какой код вы бы использовали для создания копии y этого списка, в которой элементы можно было бы изменять без побочного эффекта с изменением содержимого x ?
5.7. Кортежи
Кортеж как структура данных очень похож на список, но кортежи не могут из-меняться; их можно только создавать. Кортежи настолько похожи на списки, что у вас даже может возникнуть вопрос, для чего они были включены в Python. Дело в том, что у кортежей есть важные роли, которые не могут эффективно выполняться списками (например, роль ключей в словарях).
5.7.1. Знакомство с кортежами
Создание кортежа практически не отличается от создания списка: переменной присваивается последовательность значений. Список представляет собой последо-вательность, заключенную в квадратные скобки [ и ] ; кортеж представляет собой последовательность, заключенную в круглые скобки ( и ) : >>> x = ('a', 'b', 'c')
Эта строка создает кортеж из трех элементов.
После того как кортеж будет создан, операции с ним очень похожи на операции со списками — настолько, что разработчику легко забыть, что кортежи и списки являются разными типами данных:
>>> x[2]
'c'
>>> x[1:]
('b', 'c')
>>> len(x)
3
>>> max(x)
'c'
>>> min(x)
'a'
>>> 5 in x
False
>>> 5 not in x
Главное различие между кортежами и списками заключается в том, что кортежи неизменяемы. Попытка изменить кортеж приводит к выдаче невразумительного сообщения об ошибке. Так Python пытается сказать, что он не знает, как задать значение элемента кортежа:
>>> x[2] = 'd'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment Кортежи можно создавать на основе существующих списков при помощи опера-торов + и * :
>>> x + x
('a', 'b', 'c', 'a', 'b', 'c')
>>> 2 * x
('a', 'b', 'c', 'a', 'b', 'c')
Копии кортежей создаются теми же способами, что и копии списков: >>> x[:]
('a', 'b', 'c')
>>> x * 1
('a', 'b', 'c')
>>> x + ()
('a', 'b', 'c')
Если вы не прочитали раздел 5.6, оставшуюся часть этого абзаца можно пропустить. Сами кортежи изменяться не могут, но если они содержат изменяемые объекты (на-пример, списки или словари), такие объекты могут изменяться, если они все еще связаны со своими собственными переменными. Кортежи, содержащие изменяемые объекты, не могут использоваться в качестве ключей в словарях.
5.7.2. Одноэлементные кортежи должны содержать запятуюС использованием кортежей связана одна синтаксическая тонкость. Так как квадратные скобки, в которые заключаются списки, в Python больше нигде не ис-пользуются, понятно, что [] обозначает пустой список, а [1] обозначает список из одного элемента. О круглых скобках, в которые заключаются кортежи, этого сказать нельзя. Круглые скобки также могут использоваться для группировки элементов выражений с целью обеспечения определенного порядка вычисления. Допустим, в программе Python встречается запись (x + y) , что это должно означать? Что x и y нужно сложить и поместить в кортеж из одного элемента или же что x и y следует сложить до обработки любых других частей выражения? Эта ситуация создает проблемы только для кортежей из одного элемента, потому что кортежи с несколькими элементами всегда содержат запятые, которыми раз-деляются элементы. По наличию запятых Python понимает, что круглые скобки обозначают кортеж, а не способ группировки. Для устранения неоднозначности в случае одноэлементного кортежа Python требует, чтобы за элементом кортежа
следовала запятая. В случае кортежа с нулем элементов (пустым кортежем) проблем нет. Пустая пара круглых скобок должна быть кортежем, потому что в противном случае она не имеет смысла:
>>> x = 3
>>> y = 4
>>> (x + y) # Эта строка суммирует x и y.
7
>>> (x + y,) # Запятая показывает, что круглые скобки обозначают кортеж. (7,)
>>> () # Пустая пара скобок создает пустой кортеж.
()
5.7.3. Упаковка и распаковка кортежей
Для удобства Python позволяет размещать кортежи в левой части оператора при-сваивания. В этом случае переменным из кортежа присваиваются соответствующие значения из кортежа в правой части оператора. Простой пример: >>> (one, two, three, four) = (1, 2, 3, 4)
>>> one
1
>>> two
2
Этот пример можно записать еще проще, потому что Python распознает кортежи в контексте присваивания даже без круглых скобок. Значения в правой части упаковываются в кортеж, а затем распаковываются в переменные из левой части: one, two, three, four = 1, 2, 3, 4
Одна строка кода заменила целых четыре строки:
one = 1
two = 2
three = 3
four = 4
Это удобный способ перестановки значений двух переменных. Вместо того чтобы использовать запись
temp = var1
var1 = var2
var2 = temp
достаточно написать
var1, var2 = var2, var1
Чтобы разработчику было еще удобнее, в Python 3 появился расширенный син-таксис распаковки, который позволяет элементу с пометкой * поглотить любое количество элементов, не имеющих парного элемента. И снова примеры будут более понятными, чем описание:
>>> x = (1, 2, 3, 4)
>>> a, b, *c = x
>>> a, b, c
(1, 2, [3, 4])
>>> a, *b, c = x
>>> a, b, c
(1, [2, 3], 4)
>>> *a, b, c = x
>>> a, b, c
([1, 2], 3, 4)
>>> a, b, c, d, *e = x
>>> a, b, c, d, e
(1, 2, 3, 4, [])
Обратите внимание: все лишние элементы сохраняются в элементе со звездочкой в виде списка, а при отсутствии лишних элементов элементу со звездочкой при-сваивается пустой список.
Упаковка и распаковка также могут выполняться с ограничителями списков: >>> [a, b] = [1, 2]
>>> [c, d] = 3, 4
>>> [e, f] = (5, 6)
>>> (g, h) = 7, 8
>>> i, j = [9, 10]
>>> k, l = (11, 12)
>>> a
1
>>> [b, c, d]
[2, 3, 4]
>>> (e, f, g)
(5, 6, 7)
>>> h, i, j, k, l
(8, 9, 10, 11, 12)
5.7.4. Преобразования между списками и кортежамиКортежи легко преобразуются в списки функцией list , которая получает в ар-гументе любую последовательность и строит новый список с элементами из ис-ходной последовательности. Аналогичным образом список можно преобразовать в кортеж функцией tuple , которая делает то же самое, но создает новый кортеж вместо нового списка:
Читать дальшеИнтервал:
Закладка: