@Fut_planet · Post #11495 · 27.05.2024 г., 19:00
Pep Guardiola dejará el cargo de entrenador del Manchester City el próximo verano. 📱 Jack Gaughan. @Fut_planet⚜️#Pep👔#City🏴
TGINSIGHT SIMILAR POSTS
Изворен канал @pythonotes · Post #124 · 27 јул.
Словарь это очень распространённый тип данных в Python. Он присутствует буквально в каждом скрипте. Именованные аргументы (kwargs), атрибуты объекта (ˍˍdictˍˍ), любые неймспейсы и тд. Одна из основных особенностей словаря была в том, что это неупорядоченное множество. То есть порядок добавления ключей не гарантирует что они сохранятся в той же последовательности. Но всё изменилось в Python3.6. Как это произошло? Словарь, как часто используемый тип данных, стараются максимально оптимизировать. Про одну из таких оптимизация нам рассказывает PEP468 - Preserving the order of **kwargs in a function. Хм, причем здесь оптимизация? Всё начинается с отдельной имплементации Python под названием PyPy. В этой версии интерпретатора сделали довольно хорошую оптимизацию словарю. Показательно разница описана на этой странице Если вкратце, то дело вот в чём. Словарь на стороне С это массив. Каждый элемент это тоже массив из 3х элементов (хеш ключа, ключ и значение). Раньше, чтобы всякий раз при обновлении словаря не изменять размер массива в С (это затратно по времени), изначально он делался с запасом. Как только массив заполняется, его еще увеличивают с запасом, обычно на 1/3. При этом элементы, еще не занятые данными, заполнялись пустышками (полный пример на странице по ссылке выше) entries = [ ['--', '--', '--'], [-8522787127447073495, 'barry', 'green'], ['--', '--', '--'], ['--', '--', '--'], ['--', '--', '--'], [-9092791511155847987, 'timmy', 'red'], ['--', '--', '--'], [-6480567542315338377, 'guido', 'blue'] ] Перерасход памяти очевиден. И что было предложено? Переделать структуру данных словаря разделив его на данные и индексы. indices = [None, 1, None, None, None, 0, None, 2] entries = [[-9092791511155847987, 'timmy', 'red'], [-8522787127447073495, 'barry', 'green'], [-6480567542315338377, 'guido', 'blue']] Именно этот принцип повторили в Python 3.6. Что мы получаем в итоге? 🔸 Увеличилась скорость поиска и добавления ключей. 🔸 Сократился расход памяти в 3 раза Python 2.x-3.5 >>> d = {x: x*2 for x in range(100)} >>> d.ˍˍsizeofˍˍ() 12536 Python 3.6 >>> d = {x: x*2 for x in range(100)} >>> d.ˍˍsizeofˍˍ() 4680 Ведь теперь вместо элемента ['--', '--', '--'] у нас просто None, который, кстати, является одним и тем же объектом где бы он не использовался. 🔸 Как бонус (или как побочный эффект), мы получаем упорядоченность ключей. То есть одним выстрелом завалили трёх мамонтов! #pep
Hashtags
Глобално пребарување
@Fut_planet · Post #11495 · 27.05.2024 г., 19:00
Pep Guardiola dejará el cargo de entrenador del Manchester City el próximo verano. 📱 Jack Gaughan. @Fut_planet⚜️#Pep👔#City🏴
@sliverkiss_blog · Post #281 · 19.06.2024 г., 07:10
▎自动下载带书签的电子书 下载初中人教版教材电子书,适合用来给孩子辅导作业。 https://github.com/maogou/pep-ebook #pep-ebook #教材#人教版
@aigcrubbish · Post #242 · 09.03.2026 г., 14:45
[$] Inspecting and modifying Python types during type checking Python 的静态类型系统有其独特之处:类型注解在运行时是可访问的,但默认不会被求值,其含义由外部类型检查器赋予。这些注解通常使用内置 `typing` 模块中的辅助工具,主流类型检查器对其含义有基本共识。然而,现有的类型系统在描述真实 Python 程序中常见的动态元编程模式时,能力仍显不足。PEP 827("类型操作")旨在为 Python 的类型系统增加新能力,以解决此问题,但社区对该提案的讨论意见不一。 原文链接:https://lwn.net/Articles/1061083/ #Python#类型系统#PEP#编程语言设计 #AIGC Read more