Поколение Python 🐍
50.3K subscribers
2K photos
16 videos
6 files
866 links
Серия курсов по языку Python от BEEGEEK 🐝.

Сайт: pygen.ru
Мерч: shop.pygen.ru
Чат: @pygen_ru_comments
Бот: @pygen_ru_bot
Поддержка: @pygen_ru_support

Перечень РКН: https://www.gosuslugi.ru/snet/673650d605391b3bfb5541c0
Download Telegram
Друзья, сегодня поговорим про создание пустых словарей (списков, кортежей).

Существует два разных способа создания словаря:

1) с помощью функции dict()
2) с помощью литерала {}

У одного из этих способов есть небольшое преимущество.

Оказывается, создание пустого словаря с помощью литерала {} работает примерно в 2 раза быстрее, чем с помощью функции dict().

Прежде всего это связано с тем, что при использовании литерала выполняется меньшее количество инструкций машинного кода. Python сразу понимает, что литерал {} применяется для построения словаря, а при использовании функции dict() требуется дополнительное время на поиск функции с именем dict и непосредственный ее вызов.

Аналогично дело обстоит с функцией list() и литералом [], с функцией tuple() и литералом ().

Однако заполнение уже созданного словаря с применением литерала займет примерно столько же времени, сколько и с применением функции dict().

Стоит понимать, что разница во времени, затраченном на создание объекта с помощью функции и с помощью литерала, измеряется в наносекундах. А на создание и заполнение, к примеру, списка размером 10**6, уходит порядка 14 миллисекунд. Это значит, что разница во времени, затраченном на само создание списка через list() и через [], не будет ощутима при заполнении списка большого размера.

Вывод: используйте для создания пустого словаря, списка и кортежа литералы {}, [] и (). Это сделает ваш код немного быстрее, а самое главное — читабельнее.

#dict #list #tuple #словарь #список #кортеж #полезныйматериал
👍62✍26🫡8🔥5🆒3❤2⚡1🤯1💯111
Друзья, сегодня поговорим о преимуществах кортежей перед списками.

Кортежи часто рассматривают как неизменяемый вариант списков. Неизменяемость кортежей дает им два важных преимущества перед изменяемыми списками:

1) Ясность: когда мы видим в коде кортеж, мы точно знаем, что его длина не изменится.

2) Производительность: кортежи потребляют меньше памяти и позволяют Python выполнить ряд оптимизаций.

Обсудим подробно, за счет чего кортежи обладают большей производительностью:

1) Благодаря фиксированной длине для кортежа выделяется ровно столько памяти, сколько необходимо. Напротив, при создании списка память выделяется с запасом, чтобы при добавлении новых элементов в список не тратить время на постоянное перераспределение памяти.

2) При копировании кортежа (с помощью [:] или tuple()) возвращается ссылка на исходный кортеж. Кортежи — неизменяемые, а значит, нет необходимости возвращать копию кортежа. Напротив, при копировании списка (с помощью [:] или list()) возвращается ссылка на новый объект, потому что исходный список может измениться, а это не должно отражаться на копии.

3) За кулисами кортежи и списки являются массивами, содержащими ссылки на элементы. Массив кортежа находится в самой структуре кортежа, а список хранит только указатель на свой массив, который располагается в другом месте памяти. Это нужно для того, чтобы Python мог добавить место для нового массива ссылок бОльшего размера, когда список перестанет помещаться в выделенной памяти.

Таким образом, кортежи — это хорошо оптимизированный фундаментальный тип данных, который широко используется в различных программах и даже самим интерпретатором Python.

#python #tuple #list #кортеж #список #полезныйматериал
👍68🔥16✍12❤‍🔥3👏2🥰111
Друзья, в одном из предыдущих постов мы выяснили, что кортежи — это неизменяемые объекты, которые хорошо оптимизированы изнутри.

Однако в некоторых случаях кортежи являются относительно неизменяемыми.

Если элементы кортежа являются изменяемыми объектами, то их можно модифицировать внутри кортежа. При этом сам кортеж остается неизменяемым и его id остается тем же.

Интересным случаем является расширение списка внутри кортежа с помощью оператора += при обращении к списку по индексу кортежа.

Оператор += сначала выполняет расширение списка. Эта операция проходит успешно, так как список — изменяемый объект. Затем += пытается присвоить измененный список элементу кортежа по индексу. Эта операция завершается ошибкой TypeError, так как кортеж — неизменяемый объект.

Таким образом, выполняется только часть работы оператора +=. Мы получили исключение, но список внутри кортежа будет изменен. 🙃

Ошибки в данном случае можно избежать, используя списочный метод extend().

Стоит также отметить, что кортежи могут быть хешируемыми и нехешируемыми в зависимости от своего содержимого:

1) кортеж является хешируемым, если все его элементы хешируемые,
2) кортеж является нехешируемым, если хотя бы один из его элементов нехешируемый.

Множества и словари допускают в качестве элементов и ключей только хешируемые объекты. Следовательно, нехешируемый кортеж не может быть элементом множества или ключом словаря.

Например, если кортеж содержит в качестве элемента список (нехешируемый объект), то при попытке добавить этот кортеж в множество мы получим ошибку: TypeError: unhashable type: 'list'.

#tuple #list #список #кортеж #хешируемость #полезныйматериал
👍65🔥19❤10🆒2🦄2🥰1🍓1👀1🗿111
Друзья, сегодняшнее слово недели — кортеж (нет, не президентский). 😃

🔎Слово "tuple" происходит от английского суффикса, который встречается в словах типа double, triple, quadruple и указывает на кратность. В математике этот суффикс дал понятие n-tuple — упорядоченный набор из n элементов, после чего само "tuple" обособилось как имя для кортежа. Из математики термин перекочевал в информатику (включая Python) и означает фиксированный упорядоченный набор элементов.

✏️ Кортеж можно создать с помощью встроенной функции tuple() на основе другого итерируемого объекта или через явное указание элементов через запятую (обычно в круглых скобках):

cities = tuple({'Рим', 'Москва', 'Перт'})
date = 2012, 12, 12
point = (-4, 3)


Попытка изменить кортеж приводит к ошибке:

letters = ('a', 'b', 'c')
letters[0] = 'd' # TypeError: 'tuple' object does not support item assignment


Особенности кортежей:

✔️ элементы упорядочены
✔️ доступны операции индексации, срезов, перебора в цикле
✔️ можно хранить элементы разных типов данных (в том числе изменяемых)
✖️ изменить элементы после создания нельзя

Когда лучше использовать кортежи:

🔵 если данные фиксированы: создаются один раз и больше не изменяются (например, координаты точки, дата рождения или параметры телефона)
🔵 если нужно использовать какие-то данные в качестве ключа словаря или элемента множества

О преимуществах кортежей перед списками мы говорили в этом посте.

Ставьте реакцию:

❤️ — если используете кортежи в своих программах
👀 — если не понимаете, зачем они вообще нужны в Python

#поколениеpython #словонедели #кортеж #tuple
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤105👀2215⚡7🔥53👍1🆒11