Неужели не нашлось русских специалистов, чтобы записать курс по пайтону ? Да, можно включить переводчик и слушать с переводом, но это что? Это кто-то считает хорошим и понятным курсом для начинающих? |
Кортежи
Смотреть на youtube
Кортеж (tuple) - понятие, широко используемое в математике. Для программиста кортеж - это некоторая запись, поля которой могут быть разного типа. Кортеж наследует свойства последовательности, так что элементы кортежа имеют индексы, можно получить прямой доступ к элементу кортежа по его индексу, можно выполнять срезы, получая подпоследовательности элементов, можно выполнять операцию конкатенации кортежей.
Кортежи во-многом похожи на список, который тоже можно рассматривать как запись. Главное отличие кортежей от списков в том, что списки представляют изменяемый тип, а кортеж является неизменяемым типом. Элементы кортежа доступны для чтения, но недоступны для записи. Все операции, изменяющие кортеж, являются функциями, создающими новый экземпляр кортежа. Достоинство неизменяемых типов в том, что они обеспечивают более безопасный способ работы с объектами. Объект изменяемого типа может иметь множество имен (псевдонимов) , так что изменение содержимого объекта, выполненное в какой-то части программы одним из псевдонимов, немедленно отражается на всех псевдонимах, связанных с этим объектом. Это небезопасно и требует аккуратного программирования. Для неизменяемых типов такая ситуация не возникает. Пока изменения объекта не выполняются, все псевдонимы могут работать с объектом, читая содержимое его полей. Когда кто-то попытается изменить объект, то создается новый объект, у которого будет один владелец в момент создания.
Константа, имеющая тип кортеж, - это последовательность элементов возможно разного типа, заключенная в круглые скобки.
Доступ к элементам кортежа
Кортеж - это потомок последовательности. Следовательно, возможен доступ к элементу кортежа по его индексу. Доступ к подпоследовательности элементов кортежа задается соответствующим срезом. Если в кортеже n элементов, то индекс элемента должен находиться в пределах от 0 до n - 1. Это же верно для начального индекса среза. Конечный индекс среза может выходить за допустимые пределы, - такой срез задает подпоследовательность, заканчивающуюся последним элементом кортежа.
Кортеж является неизменяемым типом, поэтому доступ возможен только для чтения, но не для записи.
Рассмотрим пример:
#Примеры работы с кортежами - class tuple def test1(): #кортежи - индексируемый, неизменяемый тип cort1 = (2, 5, ('two', 'five')) cort2 = (2, 5, [2, 5], {2, 5}, {'two' : "два", 'five' : "пять"}, ('two', 'five') ) print(cort1, type(cort1)) print(cort2) item = cort1[2] slice1 = cort1[1:5] print (item) print(slice1) #item1 = cort1[3] #cort1[2] = 77 #cort2[3:5] = (55, 77) test1()
Результаты работы:
Заметьте, три последних оператора закомментированы. Попытка раскомментировать любой из этих операторов приведет к ошибке в период выполнения теста. Первый оператор пытается получить доступ к элементу кортежа, индекс которого выходит за допустимые пределы. Два следующих оператора пытаются изменить значения элементов кортежа, не создавая новый кортеж, что противоречит принципам неизменяемого типа.