Эффективно работаем со сложными структурами данных в Python 3.7+

  Рет қаралды 33,383

Диджитализируй!

Диджитализируй!

4 жыл бұрын

Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
Сказать спасибо за это видео можно здесь - boosty.to/digitalize.team
Сложные структуры данных часто возникают в проектах, реализующих сбор и обработку разносортных данных, как правило это многоуровневые вложенные массивы и словари. Работать с такими структурами непросто, но в Python есть отличные встроенные инструменты, позволяющие снизить сложность работы, улучшить читаемость и поддерживаемость кода, облегчить разработку в IDE, а также снизить объём используемой оперативной памяти. В видео мы поговорим о разных подходах и сравним их эффективность - List/Dict, dataclass, tuple, collections.namedtuple, typing.NamedTuple.
Код из видео - github.com/alexey-goloburdin/...
Поднимаем Debian сервер для Python/Django - установка и настройка с нуля. Как настроить сервер? - • Поднимаем Debian серве...
Основы LaTeX для тех, кто ещё не пробовал. Зачем он в 2019? Урок LaTeX - • Основы LaTeX для тех, ...
Разрабатывать в Vim или в IDE? Vim vs IDE - • Разрабатывать в Vim ил...
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
Telegram канал - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...

Пікірлер: 144
@t0digital
@t0digital 4 жыл бұрын
Подумал, что такая подборка может быть полезна не только нам. Стоит делиться подобным?
@user-de8ih7hs2e
@user-de8ih7hs2e 4 жыл бұрын
Обязательно!)
@user-no4jf5uj9q
@user-no4jf5uj9q 4 жыл бұрын
А еще если бы в видосе был кейс как Вы к этому пришли и что это дало в реальных показателях на salesbeat.pro
@t0digital
@t0digital 4 жыл бұрын
@@user-no4jf5uj9q мы загружаем тарифы служб доставки в нашу систему, это огромный массив данных, который во время работы загрузчика надо держать в оперативной памяти. Конкретный кейс - данные перестали помещаться в RAM на продакшн сервере :)
@sorokousov
@sorokousov 4 жыл бұрын
А что со скоростью?
@t0digital
@t0digital 4 жыл бұрын
@@sorokousov со скоростью чего?
@andrewslee_channel
@andrewslee_channel 4 жыл бұрын
Очень интересно и наглядно. Спасибо Вам!
@metallurg42
@metallurg42 2 жыл бұрын
Как быстро растет аудитория при условии качественного контента) Спасибо за Ваши видео!
@MaPeHuH
@MaPeHuH 4 жыл бұрын
Поздравляю Вас с днем рождения прошедшим. И спасибо за видео! Python тоже интересен!!!
@t0digital
@t0digital 4 жыл бұрын
Спасибо, Николай!
@ohmygoodness4653
@ohmygoodness4653 4 жыл бұрын
Очень интересно и полезно, надеюсь на большее количество видео по Python!
@t0digital
@t0digital 4 жыл бұрын
Спасибо! Будет много по Python - наш основной язык на сегодня. Хотя скоро выходит PHP разработчик и возможно ему тоже будет, что поведать миру:)
@mentatij
@mentatij 4 жыл бұрын
С прошедшим Днем Рождения! Насчет 2 тыс - я удивлен ( не обращал внимание на количество подписчиков, но думал у такого канала больше 10к точно! Давно пользуюсь namedtuple из collections но просто потому что удобно, никогда не задумывался о занимаемой памяти - наверное просто всегда хватало.
@egorkomarov4719
@egorkomarov4719 4 жыл бұрын
с др! Здоровья, любви и денег!
@t0digital
@t0digital 4 жыл бұрын
Спасибооо!
@optimus540prime5
@optimus540prime5 3 жыл бұрын
Успехов в делах, с ДР!
@andreil174
@andreil174 3 жыл бұрын
Ого, видео вышло 1 год назад, и тогда на канале только стукнуло 2000 подписчиков, а сейчас, в январе 2021, уже 60.6 тысяч! Впечатляющий рост!
@RM-il3fz
@RM-il3fz 2 жыл бұрын
83k)
@gio7863
@gio7863 2 жыл бұрын
116к
@user-vh4vg2pb2p
@user-vh4vg2pb2p 2 жыл бұрын
Круто! Спасибо! Будем использовать. Кажется очень полезным, особенно, когда пришёл из строго типизированного языка, вроде C#
@ginkt465
@ginkt465 4 жыл бұрын
Годный контент! Рад что твой канал растёт!
@t0digital
@t0digital 4 жыл бұрын
Я тоже рад:) Спасибооо!
@mykytao5028
@mykytao5028 4 жыл бұрын
Есть важная разница между использованием dataclass и NamedTuple, в том что NamedTuple неизменяемый тип, т.е. в этой структуре нельзя модифицировать данные, а в dataclass можно
@pchuprinina
@pchuprinina 3 жыл бұрын
Если записать туда листы, то можно
@maxburner8338
@maxburner8338 11 ай бұрын
Привет из 2023, теперь датаклассы могут быть неизменяемыми, и даже поля могут быть хешируемыми
@user-gv4dy2vd2c
@user-gv4dy2vd2c 2 жыл бұрын
Храни тебя бог! Это очень актуально и полезно
@vur21
@vur21 3 жыл бұрын
спасибо, это мне точно пригодиться
@user-jx9xq9ci8e
@user-jx9xq9ci8e 4 жыл бұрын
Спасибо тебе, друг!
@t0digital
@t0digital 4 жыл бұрын
Рад, что полезно!
@user-no4jf5uj9q
@user-no4jf5uj9q 4 жыл бұрын
С прошедшим! Может окно с кодом делать отдельно(без прозрачности), так-то картинка конечно красивая, но все таки хотелось видеть код более выражено! В остальном Вы молодцы!
@t0digital
@t0digital 4 жыл бұрын
Спасибо! Согласен, тут не очень вышло с кодом, будем стараться делать его более читаемым впоследствии
@roman-romadin
@roman-romadin 4 жыл бұрын
Крутое видео! Спасибо! Пошарил в twitter.
@t0digital
@t0digital 4 жыл бұрын
Спасибо - отдельное за шаринг!
@jeancalvin9430
@jeancalvin9430 10 ай бұрын
149 тыс.. я только что подписался))
@artemuk2097
@artemuk2097 3 жыл бұрын
Спасибо)
@antonmullakhmetov707
@antonmullakhmetov707 4 жыл бұрын
Спасибо
@hinomuratomisaburo4901
@hinomuratomisaburo4901 3 жыл бұрын
Круто же 💪 😎😃😃
@C0oo1D
@C0oo1D 4 жыл бұрын
С прошедшим!) Даешь разбой, продолжаем уменьшать (не забираясь в базы данных), замена dict на NamedTuple дает 310.1KB: class AltDict(NamedTuple): city: str tariffs: list
@t0digital
@t0digital 4 жыл бұрын
ТОП! До 310 KB мне не удалось сжать, в моём случае 469 KB github.com/alexey-goloburdin/youtube-python-structures/blob/master/5_best.py
@C0oo1D
@C0oo1D 4 жыл бұрын
Пробовал еще uuid заменить, даже в стандартной либе есть, но жрут они сильно больше строки.. тут похоже только в ctypes уходить.. А вот list на tuple заменить забыл, размер резко упал до 262 КБ) Кстати, а почему Tuple из typings? Вроде ж не указаны доп поля, тогда и обычный tuple сойдет.
@t0digital
@t0digital 4 жыл бұрын
Покажете ваш код? Tuple из typing для простановки типов по каждому полю, это удобно для подсказок IDE'шных, когда эти вложенные данные потом обрабатываются
@C0oo1D
@C0oo1D 4 жыл бұрын
Так я же ничего не менял, это github.com/alexey-goloburdin/youtube-python-structures/blob/master/5_best.py показывает 262 KB. Ну а список 310 KB. Кстати, там ведь не tuple на входе, а генератор. Если принудить к tuple - 287 KB. L30: tariffs: Generator (из typing) решает проблему :) И еще пару заметок - лишний импорт dataclass и нет пустой строки в конце ;) По dataclass - в видео сначала используете его, потом нет. Но все работает т.к. начиная с какой-то из последних версий питона (кажется 3.7) при объявлении типов или данных класс автоматически становится dataclass.
@koteich_live
@koteich_live 2 жыл бұрын
Обожаю табличку nginx на его крыжке... крайне круто смотрится...
@user-uw4yb2vf5v
@user-uw4yb2vf5v 4 жыл бұрын
Классный мужик ! Суперски объясняет! Я не думал что у него может быть меньше полумиллиона.
@t0digital
@t0digital 4 жыл бұрын
Спасибо!
@mikeshmelev7359
@mikeshmelev7359 4 жыл бұрын
Для новичка информация полезная.
@t0digital
@t0digital 4 жыл бұрын
Спасибо!
@mihailbuldakov9424
@mihailbuldakov9424 4 жыл бұрын
тема огонь
@BorisBrodski
@BorisBrodski 4 жыл бұрын
Есть ли plugin для vim, который бы понимал структуры и подсказывал поля и типы? Спасибо и с прошедшим!
@user-ne4bd3ry1n
@user-ne4bd3ry1n 4 жыл бұрын
В пайтоне есть поддержка СИ типов и структур прям из пайтона? т.е. как в luaJIT с FFI ?
@user-fo7or1cs8b
@user-fo7or1cs8b 4 жыл бұрын
Привет))) мог бы рассказать в одном из видео про коллекции в python ? Было бы очень интерестно
@t0digital
@t0digital 4 жыл бұрын
Привет, это прям совсем азы-азы, посмотрите вот этот цикл статей, он неплох m.habr.com/ru/post/319164/ И книги Простой Python и Byte of Python, если шире
@roman-romadin
@roman-romadin 4 жыл бұрын
Подскажите, пожалуйста - как Вы сделали презентацию кода на прозрачно фоне (эффектно плучилось)?
@t0digital
@t0digital 4 жыл бұрын
Это режим наложения слоя с терминалом в Final Cut, аналогичный есть и в премьере. Здесь конкретно режим Add, черный фон терминала на черном фоне окна сзади как раз дает прозрачность в этом режиме, хотя в нижней части, где стол, получается не очень хорошо, где фон светлый
@pythondeveloper252
@pythondeveloper252 2 жыл бұрын
Какие плагины для подсветки синтаксиса и автодополнения вы используете в vim?
@user-kn7ky1ih2h
@user-kn7ky1ih2h 4 жыл бұрын
С прошедшим Днём Рождения Вас ! Всего Вам самого доброго и хорошего, а главное Здоровья! Есть вопрос: будет ли видео, о установке nginx+php с нуля на сервер, и, если будет возможность, разбор конфига nginx
@t0digital
@t0digital 4 жыл бұрын
Привет, спасибо! Есть такое видео про питон, про php тоже сделаем
@user-kn7ky1ih2h
@user-kn7ky1ih2h 4 жыл бұрын
@@t0digital и еще вопрос. Где покупали наклейки на ноутбук?
@t0digital
@t0digital 4 жыл бұрын
@@user-kn7ky1ih2h Salesbeat зелёная наклейка наша, nginx ребята из nginx подогнали, нижняя тёмная Fujifilm, с камерой в комплекте была. Фудж люблю, nginx уважаю, Salesbeat вообще Весчь:)
@MaPeHuH
@MaPeHuH 4 жыл бұрын
Добрый день! А не могли бы Вы снять ролик на тему как Вы настроили Vim из CLI для работы с python и Django. Я попытался это сделать, но опыта в linux у меня мало и не получилось. Не мог даже найти директорию .vim в домашнем каталоге ~/ хотя ls -a выполнял :-)
@t0digital
@t0digital 4 жыл бұрын
Её там может и не быть (директории .vim в домашней директории) - но её можно создать, так же как может и не быть .vimrc в домашней, тоже можно создать и Vim его найдёт при следующем запуске. Про вим будут ещё видео обязательно!
@user-pe3th2ll3c
@user-pe3th2ll3c 4 жыл бұрын
хорошее качество съемки
@t0digital
@t0digital 4 жыл бұрын
Спасибо! Стараемся:)
@tabekg
@tabekg 2 жыл бұрын
Что насчёт импортов? Они тоже занимают памяти?
@vasiliynet3425
@vasiliynet3425 4 жыл бұрын
Лайк. Интересная тема. И вопрос по ней есть: в случае иерархических структур, допустим, многоуровневый справочник, типа: города - магазины - сервисы, встречал практику связывать сущности и по свойству "дети" (js), и "родители" (1с). А как в python сложилась практика выражения иерархий?
@t0digital
@t0digital 4 жыл бұрын
Не очень понял вопрос, но по сути можно реализовать это так: data = [{ 'city_name': 'Москва', 'population': 15_000_000, 'shops': [{ 'domain': 'shop1.ru', 'cms': 'Bitrix', 'services': [{ 'id': 1, 'service_name': 'service 1' },{ 'id': 2, 'service_name': 'service 2' }] }] }]
@tyomas134
@tyomas134 3 жыл бұрын
Почему не использьзовать Cython? Например, для строгой типизации переменных.
@user-gx3ie5rl1q
@user-gx3ie5rl1q 4 жыл бұрын
Привет, какую литературу выбрать для быстрейшего освоения Python?
@t0digital
@t0digital 4 жыл бұрын
Привет, лови: * Если уже работал с другим языком программирования, хороший выбор «Byte of Python» python.swaroopch.com/, есть PDF версии и перевод на русский, но не уверен, что сильно актуальные * Если опыта с другими языками нет или для углубления после «Byte of Python» - книга «Простой Python» www.ozon.ru/context/detail/id/136792714/?partner=goloburdin& * Ещё глубже - «Python. К вершинам мастерства» www.ozon.ru/context/detail/id/139599468/?partner=goloburdin& * И отличный справочник, из которого можно много выцепить - «Стандартная библиотека Python 3. Справочник с примерами» www.ozon.ru/context/detail/id/146183163/?partner=goloburdin&
@user-en8gt1mo1t
@user-en8gt1mo1t 4 жыл бұрын
Было б отлично увидеть контент для применения знаний после курсов или теории ниша еще не заполнена
@t0digital
@t0digital 4 жыл бұрын
Для применения знаний после курсов это как? Просто пишите, пишите что угодно, на работе и дома:)
@evgeniygazetdinov1620
@evgeniygazetdinov1620 3 жыл бұрын
сейчас курю материал по вопросу ,сможешь ответить на них: 1)потом же в любом случае придеться перегонять namedtuple в дикт или ордеред дикт и по сути время на конвертацию все убьет 2)да и скорость операций уступает (stackoverflow.com/questions/40694470/is-there-anything-faster-than-dict) 3) скажи в данном контексте подразумевается что весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них,или это просто решение для экономии оперативной памяти в узком месте.
@t0digital
@t0digital 3 жыл бұрын
> потом же в любом случае придется перегонять namedtuple в дикт Не всегда надо перегонять, зачем всегда перегонять? Да и я в 1 очередь говорю про эффективное использование RAM, а не скорость работы > да и скорость операций уступает Не изучал этот вопрос глубоко, надо тестить, значительной разницы там не должно быть в скорости между использованием namedtuple и другими схожими структурами > весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них, или это просто решение для экономии оперативной памяти в узком месте Экономия в узком месте там, конечно. Иначе бы вовсе дикты были бы не нужны. Хотя именованные кортежи или dataclass или TypedDict я еще использую как часть документирования типа аргументов, что очень удобно.
@gapchannelAi
@gapchannelAi 2 жыл бұрын
Я с 2021 ❤️❤️❤️❤️
@user-ne4bd3ry1n
@user-ne4bd3ry1n 4 жыл бұрын
Вы пайтону 10 ки гигабайт в сложные структуры данных засовываете? и как производительность приложения при этом?
@t0digital
@t0digital 4 жыл бұрын
Приложения и задачи бывают разные, и иногда это здравая идея обрабатывать данные именно так. Это не реалтайм задача в вебе, нормально все себя чувствует
@Denis-ou2tx
@Denis-ou2tx Жыл бұрын
Если реализовать датакласс, 1 из атрибутов которого будет являться сложный объект, а не примитив, то как реализовать сравнение экземпляров данного класса? Ожидаю, что есть 2 экземпляра, значения атрибутов которых равны, и при сравнение экземпляров ожидаю True
@user-13520sdf
@user-13520sdf 3 жыл бұрын
А если вместо named tuple использовать обычные классы? То же самое будет? Ну то есть класс с конструктором, методами, свойствами.
@t0digital
@t0digital 3 жыл бұрын
Не то же самое, NamedTuple это ведь именованный кортеж, у него свое специфичное поведение есть, присущее tuple, которого в обычном классе не будет (если его не реализовывать отдельно, конечно)
@user-13520sdf
@user-13520sdf 3 жыл бұрын
Диджитализируй! Да, я имею в виду если использовать свои классы с некоторым простым поведением, то по памяти то же самое будет? И ещё, к примеру, slots указать, то это, по идее, и быстрее будет и памяти меньше занимать чем named tuple
@t0digital
@t0digital 3 жыл бұрын
сравните:)
@lil_peepka
@lil_peepka 4 жыл бұрын
Ещё ждём видос по виму
@t0digital
@t0digital 4 жыл бұрын
Что конкретно вам хочется узнать по виму?
@lil_peepka
@lil_peepka 4 жыл бұрын
@@t0digital про интересные плагины, фишки vimrc, самого вима, всё такое. Видел что можно для разных языков отдельный конфиг делать, вот это было бы круто
@t0digital
@t0digital 4 жыл бұрын
Хорошо
@user-oi1zl6de8i
@user-oi1zl6de8i 3 жыл бұрын
Такое впечатление, что при объявлении Record (5:07) пропущены запятые (всего два поля). Тогда замеры памяти могут быть не точными.
@t0digital
@t0digital 3 жыл бұрын
Эта запись: Record = namedtuple('Record', 'first second third') создаёт именованный tuple с тремя полями - first, second, third
@user-oi1zl6de8i
@user-oi1zl6de8i 3 жыл бұрын
@@t0digital Понял, извините.
@t0digital
@t0digital 3 жыл бұрын
@@user-oi1zl6de8i все ок!
@736939
@736939 4 жыл бұрын
Вообще если работать с большими данными, то нет ничего лучше, чем датафреймы pandas
@t0digital
@t0digital 4 жыл бұрын
Да, это уже под задачу:)
@legendabs1110
@legendabs1110 4 жыл бұрын
А если я у vim(e) написал програму,как его сохранить в апк файл
@t0digital
@t0digital 4 жыл бұрын
Скомпилировать. Вим это редактор текста, не компилятор.
@legendabs1110
@legendabs1110 4 жыл бұрын
@@t0digital а если я скомплилирую в онлайн компиляторе я смогу запустить на телефоне?
@t0digital
@t0digital 4 жыл бұрын
@@legendabs1110 ну в целом можно. Я не пробовал)
@legendabs1110
@legendabs1110 4 жыл бұрын
@@t0digital ну если вам не трудно снимите виедо я буду очень рад😊
@t0digital
@t0digital 4 жыл бұрын
По мобильной разработке навряд ли на этом канале в ближайшее время будет материал. Не самая сильная наша компетенция на сегодня
@DmitryB876
@DmitryB876 4 жыл бұрын
Возвращаясь к вопросу как правильно произносить слово tuple (тапл, тупл, тьюпл) - советы профессионалов :) Книга "(O'Reilly-Питер) Простой Python - Современный стиль программирования (Билл Любанович) [2016]", стр.70: Вы могли слышать два возможных варианта произношения слова tuple (кортеж). Какой же из них является правильным? Если вы ответите неправильно, станут ли вас называть позером? Не волнуйтесь. Гвидо ван Россум, создатель языка Python, написал (bit.ly/tupletweet): «Я произношу слово tuple как too-pull по понедельникам, средам и пятницам и как tub-pull - по вторникам, четвергам и субботам. В воскресенье я вообще о них не говорю :)».
@t0digital
@t0digital 4 жыл бұрын
Книжка Любановича одна из лучших на мой взгляд для первоначального знакомства с Python:) И Byte of Python
@petersafronow5149
@petersafronow5149 4 жыл бұрын
Что за IDE?
@t0digital
@t0digital 4 жыл бұрын
Не IDE - vim
@nobeing6242
@nobeing6242 4 жыл бұрын
Видео получилось о том, что в библиотеке тайпинг..есть нотации типов, которые помогают не ошибиться так как и идэешка с встроенными чекерами просигнализирует об этом, типо чувак ты должен был вместо строк туда класть числа. Так что тема не раскрыта. Кортежи и именованные кортежи весят одинаково. Кортежи можно рассматривать как записи с полями, тип поля которых определяется содержимым. Чтоб потреблять меньше памяти надо использовать сериализацию, либо создать свой метакласс типа struct. Так что тема видоса опять не расскрыта.
@t0digital
@t0digital 4 жыл бұрын
Нет, вы не правы, чтобы потреблять меньше памяти, надо переписать всё просто на asm. Предложение в видео использовать вместо list/dict кортежи, удобнее которых именнованные кортежи, удобнее которых именнованные типизированные кортежи - это всё фигня, struct тоже фигня. ASM, вот как надо писать Python.
@user-qj5jw3mx6t
@user-qj5jw3mx6t 4 жыл бұрын
tuple по моему произносится как "тьюпл". Спасибо за видео, тоже борюсь за оптимизацию работы питоновских программ
@t0digital
@t0digital 4 жыл бұрын
Да, вы правы, надо стремиться к правильному произношению. Спасибо!
@DmitryB876
@DmitryB876 4 жыл бұрын
Как раз по разному произносят это слово носители английского языка. Кто-то тьюпл, кто-то тапл - нет единого мнения. Ребята из Postgres Professional называют их тапл, а в PostgreSQL одни сплошные таплы кругом :) Вот ещё пример: ru.forvo.com/word/tuple/
@DmitryB876
@DmitryB876 4 жыл бұрын
Еще из неоднозначных Issue: ru.forvo.com/word/issue/ Но здесь четко видно разделение по англичанам и американцам.
@user-hg8rp9ku7v
@user-hg8rp9ku7v 4 жыл бұрын
Можно же по сути адски упороться и использовать ctypes )0))0)
@maxburner8338
@maxburner8338 11 ай бұрын
148тыс))
@doomymax577
@doomymax577 4 жыл бұрын
А где привет котаны?
@t0digital
@t0digital 4 жыл бұрын
0:20 :)
@mirageYou26Tube
@mirageYou26Tube 4 жыл бұрын
Да кто такие котаны?
@nickolayfetlistov4416
@nickolayfetlistov4416 3 жыл бұрын
а как же pandas , numpy???
@t0digital
@t0digital 3 жыл бұрын
а как же научный калькулятор???
@nickolayfetlistov4416
@nickolayfetlistov4416 3 жыл бұрын
@@t0digital не понял вашего сарказма
@TheUnitto
@TheUnitto 4 жыл бұрын
А ничего что словать это хешмапа со всеми вытекающими, а датаклас это обьект с вализациями? В то время как именованый кортеж это просто хранилище? Не резировое как хешмапа и без валидации как датаклас?
@user-xg8qt8ky1s
@user-xg8qt8ky1s 4 жыл бұрын
Листинги показывай на однородном не прозрачном фоне! Именованный кортеж занимает столько же места как и обычный, но нужно 10 раз подумать перед тем как его использовать. Например его нельзя нормально сериализовать, его могут не понимать нужные библиотеки и драйверы БД. В общем пользуйтесь кортежами и всё будет хорошо.
@t0digital
@t0digital 4 жыл бұрын
Именованные кортежи сериализуются идентично обычным gist.github.com/alexey-goloburdin/18c82fd011379a83a70aae739d0296d9
@user-xg8qt8ky1s
@user-xg8qt8ky1s 4 жыл бұрын
@@t0digital ЧЯДНТ? bpython version 0.18 on top of Python 3.7.3 /usr/bin/python3 >>> import pickle >>> from collections import namedtuple >>> s = namedtuple("tmp", ["tmp1", "tmp2", "tmp3"]) >>> s1 = s(1,2,3) >>> pickle.dumps(s1) Traceback (most recent call last): File "", line 1, in pickle.dumps(s1) _pickle.PicklingError: Can't pickle : attribute lookup tmp on __main__ failed
@t0digital
@t0digital 4 жыл бұрын
​@@user-xg8qt8ky1s называйте переменную и первый параметр в namedtuple одним названием: >>> import pickle >>> from collections import namedtuple >>> s = namedtuple("s", ["tmp1", "tmp2", "tmp3"]) >>> s1 = s(1,2,3) >>> pickle.dumps(s1)
@user-xg8qt8ky1s
@user-xg8qt8ky1s 4 жыл бұрын
@@t0digital так может и сериализуется, а вот так точно сломается: >>> import pickle >>> from collections import namedtuple >>> keys = [["tmp"], ["tmp1", "tmp2"]] >>> values = [[1], [2,3]] >>> s = [] >>> for k,v in zip(keys, values): ... cls = namedtuple("cls", k) ... s.append(cls(*v)) ... >>> pickle.dumps(s) Traceback (most recent call last): File "", line 1, in pickle.dumps(s) _pickle.PicklingError: Can't pickle : it's not the same object as __main__.s
@t0digital
@t0digital 4 жыл бұрын
Написали неработающий код, ну бывает:) Вот работающий - gist.github.com/alexey-goloburdin/18c82fd011379a83a70aae739d0296d9 Красиво ли использовать globals? Нет. Реальна ли задача, при которой надо генерить новые типы данных в цикле? Нет, но даже если и да - это плохая практика. Добавляет ли namedtuple своих особенностей в код, которых нет в tuple? Конечно. Значит ли это, что не надо использовать namedtuple вместо tuple? Нет, в общем случае namedtuple гораздо более красивый и удобный способ представления данных, чем tuple, потому что более читаемый и очевидный. sometuple.first_name - лучше, чем sometuple[0].
Именование переменных, классов и методов в коде
25:40
WHY THROW CHIPS IN THE TRASH?🤪
00:18
JULI_PROETO
Рет қаралды 9 МЛН
Backstage 🤫 tutorial #elsarca #tiktok
00:13
Elsa Arca
Рет қаралды 36 МЛН
Каха инструкция по шашлыку
01:00
К-Media
Рет қаралды 8 МЛН
Just try to use a cool gadget 😍
00:33
123 GO! SHORTS
Рет қаралды 26 МЛН
This Is Why Python Data Classes Are Awesome
22:19
ArjanCodes
Рет қаралды 791 М.
namedtuple и NamedTuple в Python
9:23
python samurai
Рет қаралды 480
Python dataclasses will save you HOURS, also featuring attrs
8:50
Введение в Pydantic в Питоне(Python)
7:03
Андрей Иванов | Python
Рет қаралды 6 М.
Python: NewType против TypeAlias. Декомпозиция типов
11:13
Диджитализируй!
Рет қаралды 19 М.
WHY THROW CHIPS IN THE TRASH?🤪
00:18
JULI_PROETO
Рет қаралды 9 МЛН