[МУЗЫКА] [МУЗЫКА] Здравствуйте! Сегодня мы перейдем к изучению кортежа и списков, которые позволяют хранить в себе по несколько элементов. Почему это нужно? Потому что программы, которые работают всего лишь с несколькими переменными, обычно не очень-то и нужны. Компьютер предназначен для обработки очень больших объемов данных, в общем-то последовательность чисел, строк или чего-нибудь еще. На самом деле кортежем мы уже немножко пользовались, когда возвращали несколько значений из функции и принимали их, но тогда мы не знали, как это называется, и теперь изучим их подробней. Как создать кортеж? По-английски называется tuple. Например, мы создаем переменную, которая будет содержать какой-то константный кортеж, то есть заданный прямо в тексте программы, например, состоящий из чисел 1, 2, 3. Тогда мы просто в круглых скобках пишем эти числа 1, 2, 3. То есть слева название переменной, присваивание и какое значение мы туда кладем. Что можно делать кортежем? В принципе, многие методы и вообще способы работы с кортежем похожи на соответствующие способы работы со строкой, то есть, например, мы можем обращаться к отдельному элементу. Напечатаем первый элемент, нумерация также с нуля, и обращение к нему также делается с помощью квадратных скобок. Запустим нашу программу. [БЕЗ_ЗВУКА] Да, вот вывелся у нас первый элемент при нумерации с нуля — это двойка. Что такое кортеж? Кортеж предназначен для хранения чего угодно неизменяемого, то есть взять и поменять значение какое-то в кортеже мы не можем по индексу. Мы можем только как в строке, например, сделать срез, прибавить что-то и сделать срез всего остального, таким способом мы можем поменять один элемент. Это, конечно, происходит очень медленно, поэтому так делать не нужно, а что нужно использовать для изменяемых конструкций, мы изучим чуть позже. Это называется список. Пока же посмотрим, что можно делать еще с кортежами. Например, мы создадим второй кортеж с другими числами и напечатаем их сумму. На самом деле не очень понятно, что такое сумма кортежа, это можно по-разному было интерпретировать. Ну вот заодно узнаем, что же это такое. Запускаем, и, как мы видим, у нас в результате сложения двух кортежей получился один кортеж. Сначала записаны все элементы первого, потом все элементы второго кортежа, то есть, в принципе, то же самое, что и со строками. Если мы складываем две строки, они у нас слипаются. Точно так же это делается и с кортежами. Вообще говоря, многие, как я уже говорил, методы похожи на методы работы со строками, например, len, подсчет длины. Можно точно так же для кортежа посчитать длину. Посмотрим. Да, len работает. Кортежи предназначены в Python не только для хранения какого-то набора одинакового типа объектов, но и для хранения разных объектов, то есть для такого описания структур. Мы можем в один и тот же кортеж положить объекты совершенно разной природы. Например, целое число, вещественное число и строку. И давайте заодно посмотрим, что будет, если напечатать кортеж. То есть просто переменную типа кортеж. Запускаем, действительно, никаких ошибок нет, можно класть разного типа элементы. И печатается кортеж так же, как мы задаем его в тексте программы. Это круглые скобки и элементы, разделенные запятыми, с пробелом после них. В качестве элемента кортежа может выступать кортеж. Давайте сделаем такой. К примеру, можно сделать вот такой кортеж, в нем лежит целое число, кортеж из двух элементов, 2 и 3, и кортеж из одного элемента. Если мы просто напишем число, окруженное круглыми скобками, то это будет число, но оно будет интерпретироваться, как арифметическое выражение, и лишние скобки будут просто никак не обработаны. То есть эта четверка, записанная в скобках, пока что просто четверка. А вот если мы сделаем такую хитрую конструкцию: 4, запятая, и скобка тут же закрывается, то это будет кортеж из одного элемента, он называется singleton. Для чего это бывает нужно? Иногда мы пишем функции, которые должны уметь работать с кортежами разной длины, с длиной 1 в том числе. Ну, и если мы, например, ее проверяем, когда тестируем свою программу, то нужно создать константный кортеж, состоящий из одного элемента. Вот так записывается наш singleton. Давайте обратимся к элементу какому-то нашего кортежа, например, к первому элементу. Это, в свою очередь, является кортежем длины два, и мы возьмем от него нулевой элемент. Запускаем, смотрим, и печатается у нас число. То есть сначала пишем, когда у нас несколько индексов в квадратных скобках, мы сначала пишем наиболее внешний и затем внутренний. Вложенность может быть очень большая, то есть у нас может быть кортеж, состоящий из кортежей, который, в свою очередь, состоит из кортежей, и так далее. Тогда вам, чтобы добраться до содержимого, придется писать много квадратных скобочек. Сначала позиция в самом внешнем кортеже, потом у вас остается только внутренний кортеж, и уже в нем вы делаете то же самое. Таким образом, мы научились делать нечто в стиле двумерного массива, то что называется в других языках, то есть таким способом можно сделать что-то в стиле таблицы со строками и со столбцами. Как еще применяются кортежи? Кортежи часто применяются для описания каких-то объектов. Ну, например, мы хотим сделать описание человека, состоящее из его имени, фамилии и, например, возраста. Тогда мы можем это сделать с помощью кортежа, где первый нулевой элемент — это имя, затем фамилия и затем, например, возраст в годах. Интересно, почему оно нам подчеркивает? А, оно считает, что Иван Иванов... Слова «Иванов» оно не знает, нет у него такого в словаре, но ничего страшного. Это константа, язык русский, не совсем знаком системе, так что мы не переживаем, что оно нам подчеркнуло. И все, теперь мы можем с этим человеком каким-то образом работать. То есть если мы возьмем нулевой элемент кортежа, мы получим его имя, первый — фамилию и второй по индексу — это будет его возраст. Точно так же как в строках, мы можем обращаться по отрицательным индексам к элементам кортежа, то есть, например, если мы сейчас возьмем минус первый элемент, это будет последний элемент кортежа, в нашем случае возраст. И, действительно, вот оно работает. Таким образом, кортежи часто используются для описания объектов какой-то сложной структуры, состоящих из разного смысла полей и разного типа, возможно. Ну, и вообще говоря, любой элемент кортежа является просто-напросто ссылкой на какой-то объект, то есть все кортежи состоят из ссылок. Все они одного и того же типа. А вот что хранится по этим ссылкам, уже не так важно. Там может храниться, что угодно, и когда мы проходим по ссылке на объект, мы уже в свойствах этого объекта смотрим, какой тип он имеет. Еще одна вещь про кортежи — это упаковка и распаковка кортежей. Что такое упаковка? На самом деле, когда мы пишем вот такую конструкцию, кстати говоря, скобки можно в присваивании опускать, то есть можно просто написать три числа через запятую. Если у нас это встречается справа и там больше нет никаких арифметических или других действий, то мы можем опустить скобки. Это произойдет упаковка кортежа, то есть три этих числа или любых объекта, записанных через запятую, будут интерпретированы как запись константного кортежа, и они упакуются в один объект типа кортеж. Именно это происходило, когда мы возвращали несколько значений из функции, то есть на самом деле происходила упаковка этих значений в один объект типа кортеж. Когда мы ловили значение возвращенной функций, мы перечисляли несколько переменных через запятую. Опять же, если это единственная операция, то есть у вас только через запятую написаны имена переменных слева от присваивания, то скобки ставить необязательно, хотя можно и поставить. Итак, мы ловили вот примерно так, как у меня сейчас записано возвращенное значение из функции, и оно распаковывалось, раскладывалось по отдельным переменным. Давайте напечатаем какую-нибудь из переменных, например, b у нас должно быть равно двойке. И действительно, все хорошо распаковалось, никаких ошибок нет. То есть если вы хотите упаковать какие-то значения в кортеж, вы просто справа от присваивания записываете их через запятую, окружая или не окружая скобками. Если же вы хотите распаковать кортеж, то есть разложить его значения, расположенные по индексам, по отдельным переменным, вы перечисляете ровно столько переменных, сколько значений в кортеже, через запятую, пишете «равно» и название кортежа, который вы хотите распаковать. Сейчас мы посмотрим в следующем видео еще некоторые методы работы с кортежами, а также изучим новые типы объектов, которые позволяют получать элементы, хранящиеся в нем, поочередно, вытаскивая один за другим. [МУЗЫКА] [МУЗЫКА]