@@AlexandrStepanov-y4g мы загружаем тарифы служб доставки в нашу систему, это огромный массив данных, который во время работы загрузчика надо держать в оперативной памяти. Конкретный кейс - данные перестали помещаться в RAM на продакшн сервере :)
Есть важная разница между использованием dataclass и NamedTuple, в том что NamedTuple неизменяемый тип, т.е. в этой структуре нельзя модифицировать данные, а в dataclass можно
С прошедшим!) Даешь разбой, продолжаем уменьшать (не забираясь в базы данных), замена dict на NamedTuple дает 310.1KB: class AltDict(NamedTuple): city: str tariffs: list
Пробовал еще uuid заменить, даже в стандартной либе есть, но жрут они сильно больше строки.. тут похоже только в ctypes уходить.. А вот list на tuple заменить забыл, размер резко упал до 262 КБ) Кстати, а почему Tuple из typings? Вроде ж не указаны доп поля, тогда и обычный tuple сойдет.
Покажете ваш код? Tuple из typing для простановки типов по каждому полю, это удобно для подсказок IDE'шных, когда эти вложенные данные потом обрабатываются
Так я же ничего не менял, это 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.
С прошедшим Днем Рождения! Насчет 2 тыс - я удивлен ( не обращал внимание на количество подписчиков, но думал у такого канала больше 10к точно! Давно пользуюсь namedtuple из collections но просто потому что удобно, никогда не задумывался о занимаемой памяти - наверное просто всегда хватало.
С прошедшим! Может окно с кодом делать отдельно(без прозрачности), так-то картинка конечно красивая, но все таки хотелось видеть код более выражено! В остальном Вы молодцы!
Привет, это прям совсем азы-азы, посмотрите вот этот цикл статей, он неплох m.habr.com/ru/post/319164/ И книги Простой Python и Byte of Python, если шире
С прошедшим Днём Рождения Вас ! Всего Вам самого доброго и хорошего, а главное Здоровья! Есть вопрос: будет ли видео, о установке nginx+php с нуля на сервер, и, если будет возможность, разбор конфига nginx
@@darthl1ne Salesbeat зелёная наклейка наша, nginx ребята из nginx подогнали, нижняя тёмная Fujifilm, с камерой в комплекте была. Фудж люблю, nginx уважаю, Salesbeat вообще Весчь:)
сейчас курю материал по вопросу ,сможешь ответить на них: 1)потом же в любом случае придеться перегонять namedtuple в дикт или ордеред дикт и по сути время на конвертацию все убьет 2)да и скорость операций уступает (stackoverflow.com/questions/40694470/is-there-anything-faster-than-dict) 3) скажи в данном контексте подразумевается что весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них,или это просто решение для экономии оперативной памяти в узком месте.
> потом же в любом случае придется перегонять namedtuple в дикт Не всегда надо перегонять, зачем всегда перегонять? Да и я в 1 очередь говорю про эффективное использование RAM, а не скорость работы > да и скорость операций уступает Не изучал этот вопрос глубоко, надо тестить, значительной разницы там не должно быть в скорости между использованием namedtuple и другими схожими структурами > весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них, или это просто решение для экономии оперативной памяти в узком месте Экономия в узком месте там, конечно. Иначе бы вовсе дикты были бы не нужны. Хотя именованные кортежи или dataclass или TypedDict я еще использую как часть документирования типа аргументов, что очень удобно.
Это режим наложения слоя с терминалом в Final Cut, аналогичный есть и в премьере. Здесь конкретно режим Add, черный фон терминала на черном фоне окна сзади как раз дает прозрачность в этом режиме, хотя в нижней части, где стол, получается не очень хорошо, где фон светлый
Добрый день! А не могли бы Вы снять ролик на тему как Вы настроили Vim из CLI для работы с python и Django. Я попытался это сделать, но опыта в linux у меня мало и не получилось. Не мог даже найти директорию .vim в домашнем каталоге ~/ хотя ls -a выполнял :-)
Её там может и не быть (директории .vim в домашней директории) - но её можно создать, так же как может и не быть .vimrc в домашней, тоже можно создать и Vim его найдёт при следующем запуске. Про вим будут ещё видео обязательно!
Лайк. Интересная тема. И вопрос по ней есть: в случае иерархических структур, допустим, многоуровневый справочник, типа: города - магазины - сервисы, встречал практику связывать сущности и по свойству "дети" (js), и "родители" (1с). А как в python сложилась практика выражения иерархий?
Не очень понял вопрос, но по сути можно реализовать это так: 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' }] }] }]
Как раз по разному произносят это слово носители английского языка. Кто-то тьюпл, кто-то тапл - нет единого мнения. Ребята из Postgres Professional называют их тапл, а в PostgreSQL одни сплошные таплы кругом :) Вот ещё пример: ru.forvo.com/word/tuple/
@@t0digital про интересные плагины, фишки vimrc, самого вима, всё такое. Видел что можно для разных языков отдельный конфиг делать, вот это было бы круто
Не то же самое, NamedTuple это ведь именованный кортеж, у него свое специфичное поведение есть, присущее tuple, которого в обычном классе не будет (если его не реализовывать отдельно, конечно)
Диджитализируй! Да, я имею в виду если использовать свои классы с некоторым простым поведением, то по памяти то же самое будет? И ещё, к примеру, slots указать, то это, по идее, и быстрее будет и памяти меньше занимать чем named tuple
Видео получилось о том, что в библиотеке тайпинг..есть нотации типов, которые помогают не ошибиться так как и идэешка с встроенными чекерами просигнализирует об этом, типо чувак ты должен был вместо строк туда класть числа. Так что тема не раскрыта. Кортежи и именованные кортежи весят одинаково. Кортежи можно рассматривать как записи с полями, тип поля которых определяется содержимым. Чтоб потреблять меньше памяти надо использовать сериализацию, либо создать свой метакласс типа struct. Так что тема видоса опять не расскрыта.
Нет, вы не правы, чтобы потреблять меньше памяти, надо переписать всё просто на asm. Предложение в видео использовать вместо list/dict кортежи, удобнее которых именнованные кортежи, удобнее которых именнованные типизированные кортежи - это всё фигня, struct тоже фигня. ASM, вот как надо писать Python.
Возвращаясь к вопросу как правильно произносить слово tuple (тапл, тупл, тьюпл) - советы профессионалов :) Книга "(O'Reilly-Питер) Простой Python - Современный стиль программирования (Билл Любанович) [2016]", стр.70: Вы могли слышать два возможных варианта произношения слова tuple (кортеж). Какой же из них является правильным? Если вы ответите неправильно, станут ли вас называть позером? Не волнуйтесь. Гвидо ван Россум, создатель языка Python, написал (bit.ly/tupletweet): «Я произношу слово tuple как too-pull по понедельникам, средам и пятницам и как tub-pull - по вторникам, четвергам и субботам. В воскресенье я вообще о них не говорю :)».
Привет, лови: * Если уже работал с другим языком программирования, хороший выбор «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&
Если реализовать датакласс, 1 из атрибутов которого будет являться сложный объект, а не примитив, то как реализовать сравнение экземпляров данного класса? Ожидаю, что есть 2 экземпляра, значения атрибутов которых равны, и при сравнение экземпляров ожидаю True
Приложения и задачи бывают разные, и иногда это здравая идея обрабатывать данные именно так. Это не реалтайм задача в вебе, нормально все себя чувствует
Листинги показывай на однородном не прозрачном фоне! Именованный кортеж занимает столько же места как и обычный, но нужно 10 раз подумать перед тем как его использовать. Например его нельзя нормально сериализовать, его могут не понимать нужные библиотеки и драйверы БД. В общем пользуйтесь кортежами и всё будет хорошо.
@@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
Написали неработающий код, ну бывает:) Вот работающий - gist.github.com/alexey-goloburdin/18c82fd011379a83a70aae739d0296d9 Красиво ли использовать globals? Нет. Реальна ли задача, при которой надо генерить новые типы данных в цикле? Нет, но даже если и да - это плохая практика. Добавляет ли namedtuple своих особенностей в код, которых нет в tuple? Конечно. Значит ли это, что не надо использовать namedtuple вместо tuple? Нет, в общем случае namedtuple гораздо более красивый и удобный способ представления данных, чем tuple, потому что более читаемый и очевидный. sometuple.first_name - лучше, чем sometuple[0].
А ничего что словать это хешмапа со всеми вытекающими, а датаклас это обьект с вализациями? В то время как именованый кортеж это просто хранилище? Не резировое как хешмапа и без валидации как датаклас?
Подумал, что такая подборка может быть полезна не только нам. Стоит делиться подобным?
Обязательно!)
А еще если бы в видосе был кейс как Вы к этому пришли и что это дало в реальных показателях на salesbeat.pro
@@AlexandrStepanov-y4g мы загружаем тарифы служб доставки в нашу систему, это огромный массив данных, который во время работы загрузчика надо держать в оперативной памяти. Конкретный кейс - данные перестали помещаться в RAM на продакшн сервере :)
А что со скоростью?
@@sorokousov со скоростью чего?
с др!
Здоровья, любви и денег!
Спасибооо!
Успехов в делах, с ДР!
Как быстро растет аудитория при условии качественного контента) Спасибо за Ваши видео!
Есть важная разница между использованием dataclass и NamedTuple, в том что NamedTuple неизменяемый тип, т.е. в этой структуре нельзя модифицировать данные, а в dataclass можно
Если записать туда листы, то можно
Привет из 2023, теперь датаклассы могут быть неизменяемыми, и даже поля могут быть хешируемыми
Ого, видео вышло 1 год назад, и тогда на канале только стукнуло 2000 подписчиков, а сейчас, в январе 2021, уже 60.6 тысяч! Впечатляющий рост!
83k)
116к
160k
Храни тебя бог! Это очень актуально и полезно
Поздравляю Вас с днем рождения прошедшим.
И спасибо за видео! Python тоже интересен!!!
Спасибо, Николай!
Очень интересно и наглядно. Спасибо Вам!
Круто! Спасибо! Будем использовать. Кажется очень полезным, особенно, когда пришёл из строго типизированного языка, вроде C#
спасибо, это мне точно пригодиться
С прошедшим!)
Даешь разбой, продолжаем уменьшать (не забираясь в базы данных), замена dict на NamedTuple дает 310.1KB:
class AltDict(NamedTuple):
city: str
tariffs: list
ТОП! До 310 KB мне не удалось сжать, в моём случае 469 KB github.com/alexey-goloburdin/youtube-python-structures/blob/master/5_best.py
Пробовал еще uuid заменить, даже в стандартной либе есть, но жрут они сильно больше строки.. тут похоже только в ctypes уходить..
А вот list на tuple заменить забыл, размер резко упал до 262 КБ) Кстати, а почему Tuple из typings? Вроде ж не указаны доп поля, тогда и обычный tuple сойдет.
Покажете ваш код?
Tuple из typing для простановки типов по каждому полю, это удобно для подсказок IDE'шных, когда эти вложенные данные потом обрабатываются
Так я же ничего не менял, это 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.
Для новичка информация полезная.
Спасибо!
Очень интересно и полезно, надеюсь на большее количество видео по Python!
Спасибо! Будет много по Python - наш основной язык на сегодня. Хотя скоро выходит PHP разработчик и возможно ему тоже будет, что поведать миру:)
Годный контент! Рад что твой канал растёт!
Я тоже рад:) Спасибооо!
Обожаю табличку nginx на его крыжке... крайне круто смотрится...
Классный мужик ! Суперски объясняет! Я не думал что у него может быть меньше полумиллиона.
Спасибо!
С прошедшим Днем Рождения!
Насчет 2 тыс - я удивлен ( не обращал внимание на количество подписчиков, но думал у такого канала больше 10к точно!
Давно пользуюсь namedtuple из collections но просто потому что удобно, никогда не задумывался о занимаемой памяти - наверное просто всегда хватало.
149 тыс.. я только что подписался))
Спасибо тебе, друг!
Рад, что полезно!
С прошедшим! Может окно с кодом делать отдельно(без прозрачности), так-то картинка конечно красивая, но все таки хотелось видеть код более выражено! В остальном Вы молодцы!
Спасибо! Согласен, тут не очень вышло с кодом, будем стараться делать его более читаемым впоследствии
Спасибо)
Круто же 💪 😎😃😃
Крутое видео! Спасибо! Пошарил в twitter.
Спасибо - отдельное за шаринг!
Привет))) мог бы рассказать в одном из видео про коллекции в python ? Было бы очень интерестно
Привет, это прям совсем азы-азы, посмотрите вот этот цикл статей, он неплох m.habr.com/ru/post/319164/
И книги Простой Python и Byte of Python, если шире
Спасибо
тема огонь
Какие плагины для подсветки синтаксиса и автодополнения вы используете в vim?
Почему не использьзовать Cython? Например, для строгой типизации переменных.
С прошедшим Днём Рождения Вас ! Всего Вам самого доброго и хорошего, а главное Здоровья! Есть вопрос: будет ли видео, о установке nginx+php с нуля на сервер, и, если будет возможность, разбор конфига nginx
Привет, спасибо! Есть такое видео про питон, про php тоже сделаем
@@t0digital и еще вопрос. Где покупали наклейки на ноутбук?
@@darthl1ne Salesbeat зелёная наклейка наша, nginx ребята из nginx подогнали, нижняя тёмная Fujifilm, с камерой в комплекте была. Фудж люблю, nginx уважаю, Salesbeat вообще Весчь:)
сейчас курю материал по вопросу ,сможешь ответить на них:
1)потом же в любом случае придеться перегонять namedtuple в дикт или ордеред дикт и по сути время на конвертацию все убьет
2)да и скорость операций уступает (stackoverflow.com/questions/40694470/is-there-anything-faster-than-dict)
3) скажи в данном контексте подразумевается что весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них,или это просто решение для экономии оперативной памяти в узком месте.
> потом же в любом случае придется перегонять namedtuple в дикт
Не всегда надо перегонять, зачем всегда перегонять? Да и я в 1 очередь говорю про эффективное использование RAM, а не скорость работы
> да и скорость операций уступает
Не изучал этот вопрос глубоко, надо тестить, значительной разницы там не должно быть в скорости между использованием namedtuple и другими схожими структурами
> весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них, или это просто решение для экономии оперативной памяти в узком месте
Экономия в узком месте там, конечно. Иначе бы вовсе дикты были бы не нужны. Хотя именованные кортежи или dataclass или TypedDict я еще использую как часть документирования типа аргументов, что очень удобно.
хорошее качество съемки
Спасибо! Стараемся:)
Подскажите, пожалуйста - как Вы сделали презентацию кода на прозрачно фоне (эффектно плучилось)?
Это режим наложения слоя с терминалом в Final Cut, аналогичный есть и в премьере. Здесь конкретно режим Add, черный фон терминала на черном фоне окна сзади как раз дает прозрачность в этом режиме, хотя в нижней части, где стол, получается не очень хорошо, где фон светлый
Что насчёт импортов? Они тоже занимают памяти?
Добрый день! А не могли бы Вы снять ролик на тему как Вы настроили Vim из CLI для работы с python и Django. Я попытался это сделать, но опыта в linux у меня мало и не получилось. Не мог даже найти директорию .vim в домашнем каталоге ~/ хотя ls -a выполнял :-)
Её там может и не быть (директории .vim в домашней директории) - но её можно создать, так же как может и не быть .vimrc в домашней, тоже можно создать и Vim его найдёт при следующем запуске. Про вим будут ещё видео обязательно!
Есть ли plugin для vim, который бы понимал структуры и подсказывал поля и типы? Спасибо и с прошедшим!
Лайк. Интересная тема. И вопрос по ней есть: в случае иерархических структур, допустим, многоуровневый справочник, типа: города - магазины - сервисы, встречал практику связывать сущности и по свойству "дети" (js), и "родители" (1с). А как в python сложилась практика выражения иерархий?
Не очень понял вопрос, но по сути можно реализовать это так:
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'
}]
}]
}]
В пайтоне есть поддержка СИ типов и структур прям из пайтона? т.е. как в luaJIT с FFI ?
Было б отлично увидеть контент для применения знаний после курсов или теории ниша еще не заполнена
Для применения знаний после курсов это как? Просто пишите, пишите что угодно, на работе и дома:)
tuple по моему произносится как "тьюпл". Спасибо за видео, тоже борюсь за оптимизацию работы питоновских программ
Да, вы правы, надо стремиться к правильному произношению. Спасибо!
Как раз по разному произносят это слово носители английского языка. Кто-то тьюпл, кто-то тапл - нет единого мнения. Ребята из Postgres Professional называют их тапл, а в PostgreSQL одни сплошные таплы кругом :) Вот ещё пример: ru.forvo.com/word/tuple/
Еще из неоднозначных Issue: ru.forvo.com/word/issue/ Но здесь четко видно разделение по англичанам и американцам.
Такое впечатление, что при объявлении Record (5:07) пропущены запятые (всего два поля). Тогда замеры памяти могут быть не точными.
Эта запись:
Record = namedtuple('Record', 'first second third')
создаёт именованный tuple с тремя полями - first, second, third
@@t0digital Понял, извините.
@@ИванИванов-н9т9ъ все ок!
Ещё ждём видос по виму
Что конкретно вам хочется узнать по виму?
@@t0digital про интересные плагины, фишки vimrc, самого вима, всё такое. Видел что можно для разных языков отдельный конфиг делать, вот это было бы круто
Хорошо
А если вместо named tuple использовать обычные классы? То же самое будет? Ну то есть класс с конструктором, методами, свойствами.
Не то же самое, NamedTuple это ведь именованный кортеж, у него свое специфичное поведение есть, присущее tuple, которого в обычном классе не будет (если его не реализовывать отдельно, конечно)
Диджитализируй! Да, я имею в виду если использовать свои классы с некоторым простым поведением, то по памяти то же самое будет? И ещё, к примеру, slots указать, то это, по идее, и быстрее будет и памяти меньше занимать чем named tuple
сравните:)
Вообще если работать с большими данными, то нет ничего лучше, чем датафреймы pandas
Да, это уже под задачу:)
Я с 2021 ❤️❤️❤️❤️
Видео получилось о том, что в библиотеке тайпинг..есть нотации типов, которые помогают не ошибиться так как и идэешка с встроенными чекерами просигнализирует об этом, типо чувак ты должен был вместо строк туда класть числа. Так что тема не раскрыта. Кортежи и именованные кортежи весят одинаково. Кортежи можно рассматривать как записи с полями, тип поля которых определяется содержимым. Чтоб потреблять меньше памяти надо использовать сериализацию, либо создать свой метакласс типа struct. Так что тема видоса опять не расскрыта.
Нет, вы не правы, чтобы потреблять меньше памяти, надо переписать всё просто на asm. Предложение в видео использовать вместо list/dict кортежи, удобнее которых именнованные кортежи, удобнее которых именнованные типизированные кортежи - это всё фигня, struct тоже фигня. ASM, вот как надо писать Python.
Возвращаясь к вопросу как правильно произносить слово tuple (тапл, тупл, тьюпл) - советы профессионалов :)
Книга "(O'Reilly-Питер) Простой Python - Современный стиль программирования (Билл Любанович) [2016]", стр.70:
Вы могли слышать два возможных варианта произношения слова tuple (кортеж). Какой же из них является правильным? Если вы ответите неправильно, станут ли вас называть позером? Не волнуйтесь. Гвидо ван Россум, создатель языка Python, написал (bit.ly/tupletweet): «Я произношу слово tuple как too-pull по понедельникам, средам и пятницам и как tub-pull - по вторникам, четвергам и субботам. В воскресенье я вообще о них не говорю :)».
Книжка Любановича одна из лучших на мой взгляд для первоначального знакомства с Python:) И Byte of Python
Привет, какую литературу выбрать для быстрейшего освоения Python?
Привет, лови:
* Если уже работал с другим языком программирования, хороший выбор «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&
Если реализовать датакласс, 1 из атрибутов которого будет являться сложный объект, а не примитив, то как реализовать сравнение экземпляров данного класса? Ожидаю, что есть 2 экземпляра, значения атрибутов которых равны, и при сравнение экземпляров ожидаю True
Вы пайтону 10 ки гигабайт в сложные структуры данных засовываете? и как производительность приложения при этом?
Приложения и задачи бывают разные, и иногда это здравая идея обрабатывать данные именно так. Это не реалтайм задача в вебе, нормально все себя чувствует
Можно же по сути адски упороться и использовать ctypes )0))0)
А если я у vim(e) написал програму,как его сохранить в апк файл
Скомпилировать. Вим это редактор текста, не компилятор.
@@t0digital а если я скомплилирую в онлайн компиляторе я смогу запустить на телефоне?
@@legendabs1110 ну в целом можно. Я не пробовал)
@@t0digital ну если вам не трудно снимите виедо я буду очень рад😊
По мобильной разработке навряд ли на этом канале в ближайшее время будет материал. Не самая сильная наша компетенция на сегодня
Что за IDE?
Не IDE - vim
а как же pandas , numpy???
а как же научный калькулятор???
@@t0digital не понял вашего сарказма
А где привет котаны?
0:20 :)
Да кто такие котаны?
Листинги показывай на однородном не прозрачном фоне! Именованный кортеж занимает столько же места как и обычный, но нужно 10 раз подумать перед тем как его использовать. Например его нельзя нормально сериализовать, его могут не понимать нужные библиотеки и драйверы БД. В общем пользуйтесь кортежами и всё будет хорошо.
Именованные кортежи сериализуются идентично обычным gist.github.com/alexey-goloburdin/18c82fd011379a83a70aae739d0296d9
@@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
@@ПуляевГригорий называйте переменную и первый параметр в namedtuple одним названием:
>>> import pickle
>>> from collections import namedtuple
>>> s = namedtuple("s", ["tmp1", "tmp2", "tmp3"])
>>> s1 = s(1,2,3)
>>> pickle.dumps(s1)
@@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
Написали неработающий код, ну бывает:) Вот работающий - gist.github.com/alexey-goloburdin/18c82fd011379a83a70aae739d0296d9
Красиво ли использовать globals? Нет. Реальна ли задача, при которой надо генерить новые типы данных в цикле? Нет, но даже если и да - это плохая практика. Добавляет ли namedtuple своих особенностей в код, которых нет в tuple? Конечно. Значит ли это, что не надо использовать namedtuple вместо tuple? Нет, в общем случае namedtuple гораздо более красивый и удобный способ представления данных, чем tuple, потому что более читаемый и очевидный.
sometuple.first_name - лучше, чем sometuple[0].
148тыс))
А ничего что словать это хешмапа со всеми вытекающими, а датаклас это обьект с вализациями? В то время как именованый кортеж это просто хранилище? Не резировое как хешмапа и без валидации как датаклас?