Зачем нужны кортежи, если есть списки?
Зачем нужны кортежи, если есть списки?
- Защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).
- Меньший размер. Дабы не быть голословным:
>>>
>>> a = (1, 2, 3, 4, 5, 6)>>> b = [1, 2, 3, 4, 5, 6]>>> a.__sizeof__()36>>> b.__sizeof__()44- Возможность использовать кортежи в качестве ключей словаря:
>>>
>>> d = {(1, 1, 1) : 1}>>> d{(1, 1, 1): 1}>>> d = {[1, 1, 1] : 1}Traceback (most recent call last): File "", line 1, in d = {[1, 1, 1] : 1}TypeError: unhashable type: 'list'Как работать с кортежами?
Как работать с кортежами?
С преимуществами кортежей разобрались, теперь встает вопрос - а как с ними работать. Примерно так же, как и со списками.
Создаем пустой кортеж:
>>>
>>> a = tuple() # С помощью встроенной функции tuple()>>> a()>>> a = () # С помощью литерала кортежа>>> a()>>>Создаем кортеж из одного элемента:
>>>
>>> a = ('s')>>> a's'Стоп. Получилась строка. Но как же так? Мы же кортеж хотели! Как же нам кортеж получить?
>>>
>>> a = ('s', )>>> a('s',)Ура! Заработало! Все дело - в запятой. Сами по себе скобки ничего не значат, точнее, значат то, что внутри них находится одна инструкция, которая может быть отделена пробелами, переносом строк и прочим мусором. Кстати, кортеж можно создать и так:
>>>
>>> a = 's',>>> a('s',)Но все же не увлекайтесь, и ставьте скобки, тем более, что бывают случаи, когда скобки необходимы.
Ну и создать кортеж из итерируемого объекта можно с помощью все той же пресловутой функции tuple()
>>>
>>> a = tuple('hello, world!')>>> a('h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!')