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

Sdílet
Vložit
  • čas přidán 29. 07. 2019
  • Мой курс «Хардкорная веб-разработка» - 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...

Komentáře • 144

  • @t0digital
    @t0digital  Před 5 lety +72

    Подумал, что такая подборка может быть полезна не только нам. Стоит делиться подобным?

    • @user-de8ih7hs2e
      @user-de8ih7hs2e Před 5 lety +1

      Обязательно!)

    • @user-no4jf5uj9q
      @user-no4jf5uj9q Před 5 lety

      А еще если бы в видосе был кейс как Вы к этому пришли и что это дало в реальных показателях на salesbeat.pro

    • @t0digital
      @t0digital  Před 5 lety +2

      @@user-no4jf5uj9q мы загружаем тарифы служб доставки в нашу систему, это огромный массив данных, который во время работы загрузчика надо держать в оперативной памяти. Конкретный кейс - данные перестали помещаться в RAM на продакшн сервере :)

    • @sorokousov
      @sorokousov Před 4 lety

      А что со скоростью?

    • @t0digital
      @t0digital  Před 4 lety

      @@sorokousov со скоростью чего?

  • @andrewslee_channel
    @andrewslee_channel Před 4 lety +2

    Очень интересно и наглядно. Спасибо Вам!

  • @metallurg42
    @metallurg42 Před 2 lety

    Как быстро растет аудитория при условии качественного контента) Спасибо за Ваши видео!

  • @ohmygoodness4653
    @ohmygoodness4653 Před 5 lety +2

    Очень интересно и полезно, надеюсь на большее количество видео по Python!

    • @t0digital
      @t0digital  Před 5 lety

      Спасибо! Будет много по Python - наш основной язык на сегодня. Хотя скоро выходит PHP разработчик и возможно ему тоже будет, что поведать миру:)

  • @MaPeHuH
    @MaPeHuH Před 5 lety +5

    Поздравляю Вас с днем рождения прошедшим.
    И спасибо за видео! Python тоже интересен!!!

    • @t0digital
      @t0digital  Před 5 lety

      Спасибо, Николай!

  • @ginkt465
    @ginkt465 Před 4 lety

    Годный контент! Рад что твой канал растёт!

    • @t0digital
      @t0digital  Před 4 lety

      Я тоже рад:) Спасибооо!

  • @user-vh4vg2pb2p
    @user-vh4vg2pb2p Před 2 lety

    Круто! Спасибо! Будем использовать. Кажется очень полезным, особенно, когда пришёл из строго типизированного языка, вроде C#

  • @andreil174
    @andreil174 Před 3 lety +3

    Ого, видео вышло 1 год назад, и тогда на канале только стукнуло 2000 подписчиков, а сейчас, в январе 2021, уже 60.6 тысяч! Впечатляющий рост!

  • @mentatij
    @mentatij Před 5 lety +1

    С прошедшим Днем Рождения!
    Насчет 2 тыс - я удивлен ( не обращал внимание на количество подписчиков, но думал у такого канала больше 10к точно!
    Давно пользуюсь namedtuple из collections но просто потому что удобно, никогда не задумывался о занимаемой памяти - наверное просто всегда хватало.

  • @user-gv4dy2vd2c
    @user-gv4dy2vd2c Před 2 lety

    Храни тебя бог! Это очень актуально и полезно

  • @mykytao5028
    @mykytao5028 Před 4 lety +26

    Есть важная разница между использованием dataclass и NamedTuple, в том что NamedTuple неизменяемый тип, т.е. в этой структуре нельзя модифицировать данные, а в dataclass можно

    • @pchuprinina
      @pchuprinina Před 3 lety +2

      Если записать туда листы, то можно

    • @maxburner8338
      @maxburner8338 Před rokem +1

      Привет из 2023, теперь датаклассы могут быть неизменяемыми, и даже поля могут быть хешируемыми

  • @egorkomarov4719
    @egorkomarov4719 Před 5 lety +9

    с др!
    Здоровья, любви и денег!

  • @vur21
    @vur21 Před 3 lety

    спасибо, это мне точно пригодиться

  • @user-jx9xq9ci8e
    @user-jx9xq9ci8e Před 4 lety

    Спасибо тебе, друг!

    • @t0digital
      @t0digital  Před 4 lety

      Рад, что полезно!

  • @artemuk2097
    @artemuk2097 Před 4 lety

    Спасибо)

  • @roman-romadin
    @roman-romadin Před 5 lety

    Крутое видео! Спасибо! Пошарил в twitter.

    • @t0digital
      @t0digital  Před 5 lety +1

      Спасибо - отдельное за шаринг!

  • @user-no4jf5uj9q
    @user-no4jf5uj9q Před 5 lety +2

    С прошедшим! Может окно с кодом делать отдельно(без прозрачности), так-то картинка конечно красивая, но все таки хотелось видеть код более выражено! В остальном Вы молодцы!

    • @t0digital
      @t0digital  Před 5 lety +2

      Спасибо! Согласен, тут не очень вышло с кодом, будем стараться делать его более читаемым впоследствии

  • @antonmullakhmetov707
    @antonmullakhmetov707 Před 4 lety

    Спасибо

  • @C0oo1D
    @C0oo1D Před 5 lety +3

    С прошедшим!)
    Даешь разбой, продолжаем уменьшать (не забираясь в базы данных), замена dict на NamedTuple дает 310.1KB:
    class AltDict(NamedTuple):
    city: str
    tariffs: list

    • @t0digital
      @t0digital  Před 5 lety

      ТОП! До 310 KB мне не удалось сжать, в моём случае 469 KB github.com/alexey-goloburdin/youtube-python-structures/blob/master/5_best.py

    • @C0oo1D
      @C0oo1D Před 5 lety

      Пробовал еще uuid заменить, даже в стандартной либе есть, но жрут они сильно больше строки.. тут похоже только в ctypes уходить..
      А вот list на tuple заменить забыл, размер резко упал до 262 КБ) Кстати, а почему Tuple из typings? Вроде ж не указаны доп поля, тогда и обычный tuple сойдет.

    • @t0digital
      @t0digital  Před 5 lety

      Покажете ваш код?
      Tuple из typing для простановки типов по каждому полю, это удобно для подсказок IDE'шных, когда эти вложенные данные потом обрабатываются

    • @C0oo1D
      @C0oo1D Před 5 lety

      Так я же ничего не менял, это 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.

  • @hinomuratomisaburo4901

    Круто же 💪 😎😃😃

  • @user-uw4yb2vf5v
    @user-uw4yb2vf5v Před 4 lety

    Классный мужик ! Суперски объясняет! Я не думал что у него может быть меньше полумиллиона.

  • @jeancalvin9430
    @jeancalvin9430 Před 11 měsíci +1

    149 тыс.. я только что подписался))

  • @mikeshmelev7359
    @mikeshmelev7359 Před 4 lety

    Для новичка информация полезная.

  • @mihailbuldakov9424
    @mihailbuldakov9424 Před 4 lety

    тема огонь

  • @koteich_live
    @koteich_live Před 2 lety

    Обожаю табличку nginx на его крыжке... крайне круто смотрится...

  • @user-kn7ky1ih2h
    @user-kn7ky1ih2h Před 5 lety

    С прошедшим Днём Рождения Вас ! Всего Вам самого доброго и хорошего, а главное Здоровья! Есть вопрос: будет ли видео, о установке nginx+php с нуля на сервер, и, если будет возможность, разбор конфига nginx

    • @t0digital
      @t0digital  Před 5 lety

      Привет, спасибо! Есть такое видео про питон, про php тоже сделаем

    • @user-kn7ky1ih2h
      @user-kn7ky1ih2h Před 5 lety

      @@t0digital и еще вопрос. Где покупали наклейки на ноутбук?

    • @t0digital
      @t0digital  Před 5 lety

      @@user-kn7ky1ih2h Salesbeat зелёная наклейка наша, nginx ребята из nginx подогнали, нижняя тёмная Fujifilm, с камерой в комплекте была. Фудж люблю, nginx уважаю, Salesbeat вообще Весчь:)

  • @user-fo7or1cs8b
    @user-fo7or1cs8b Před 5 lety +2

    Привет))) мог бы рассказать в одном из видео про коллекции в python ? Было бы очень интерестно

    • @t0digital
      @t0digital  Před 5 lety +3

      Привет, это прям совсем азы-азы, посмотрите вот этот цикл статей, он неплох m.habr.com/ru/post/319164/
      И книги Простой Python и Byte of Python, если шире

  • @neznajkinguitar
    @neznajkinguitar Před 5 lety +1

    хорошее качество съемки

    • @t0digital
      @t0digital  Před 5 lety

      Спасибо! Стараемся:)

  • @BorisBrodski
    @BorisBrodski Před 4 lety

    Есть ли plugin для vim, который бы понимал структуры и подсказывал поля и типы? Спасибо и с прошедшим!

  • @user-en8gt1mo1t
    @user-en8gt1mo1t Před 4 lety

    Было б отлично увидеть контент для применения знаний после курсов или теории ниша еще не заполнена

    • @t0digital
      @t0digital  Před 4 lety

      Для применения знаний после курсов это как? Просто пишите, пишите что угодно, на работе и дома:)

  • @gapchannelAi
    @gapchannelAi Před 3 lety

    Я с 2021 ❤️❤️❤️❤️

  • @roman-romadin
    @roman-romadin Před 5 lety +1

    Подскажите, пожалуйста - как Вы сделали презентацию кода на прозрачно фоне (эффектно плучилось)?

    • @t0digital
      @t0digital  Před 5 lety +1

      Это режим наложения слоя с терминалом в Final Cut, аналогичный есть и в премьере. Здесь конкретно режим Add, черный фон терминала на черном фоне окна сзади как раз дает прозрачность в этом режиме, хотя в нижней части, где стол, получается не очень хорошо, где фон светлый

  • @evgeniygazetdinov1620
    @evgeniygazetdinov1620 Před 4 lety

    сейчас курю материал по вопросу ,сможешь ответить на них:
    1)потом же в любом случае придеться перегонять namedtuple в дикт или ордеред дикт и по сути время на конвертацию все убьет
    2)да и скорость операций уступает (stackoverflow.com/questions/40694470/is-there-anything-faster-than-dict)
    3) скажи в данном контексте подразумевается что весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них,или это просто решение для экономии оперативной памяти в узком месте.

    • @t0digital
      @t0digital  Před 4 lety

      > потом же в любом случае придется перегонять namedtuple в дикт
      Не всегда надо перегонять, зачем всегда перегонять? Да и я в 1 очередь говорю про эффективное использование RAM, а не скорость работы
      > да и скорость операций уступает
      Не изучал этот вопрос глубоко, надо тестить, значительной разницы там не должно быть в скорости между использованием namedtuple и другими схожими структурами
      > весь проект будет состоять из namedtuple и вся логика будет строиться вокруг них, или это просто решение для экономии оперативной памяти в узком месте
      Экономия в узком месте там, конечно. Иначе бы вовсе дикты были бы не нужны. Хотя именованные кортежи или dataclass или TypedDict я еще использую как часть документирования типа аргументов, что очень удобно.

  • @MaPeHuH
    @MaPeHuH Před 5 lety +1

    Добрый день! А не могли бы Вы снять ролик на тему как Вы настроили Vim из CLI для работы с python и Django. Я попытался это сделать, но опыта в linux у меня мало и не получилось. Не мог даже найти директорию .vim в домашнем каталоге ~/ хотя ls -a выполнял :-)

    • @t0digital
      @t0digital  Před 5 lety

      Её там может и не быть (директории .vim в домашней директории) - но её можно создать, так же как может и не быть .vimrc в домашней, тоже можно создать и Vim его найдёт при следующем запуске. Про вим будут ещё видео обязательно!

  • @vasiliynet3425
    @vasiliynet3425 Před 4 lety

    Лайк. Интересная тема. И вопрос по ней есть: в случае иерархических структур, допустим, многоуровневый справочник, типа: города - магазины - сервисы, встречал практику связывать сущности и по свойству "дети" (js), и "родители" (1с). А как в python сложилась практика выражения иерархий?

    • @t0digital
      @t0digital  Před 4 lety

      Не очень понял вопрос, но по сути можно реализовать это так:
      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'
      }]
      }]
      }]

  • @user-ne4bd3ry1n
    @user-ne4bd3ry1n Před 4 lety

    В пайтоне есть поддержка СИ типов и структур прям из пайтона? т.е. как в luaJIT с FFI ?

  • @pythondeveloper252
    @pythondeveloper252 Před 3 lety

    Какие плагины для подсветки синтаксиса и автодополнения вы используете в vim?

  • @736939
    @736939 Před 4 lety +2

    Вообще если работать с большими данными, то нет ничего лучше, чем датафреймы pandas

    • @t0digital
      @t0digital  Před 4 lety

      Да, это уже под задачу:)

  • @лилпипка
    @лилпипка Před 5 lety +3

    Ещё ждём видос по виму

    • @t0digital
      @t0digital  Před 5 lety

      Что конкретно вам хочется узнать по виму?

    • @лилпипка
      @лилпипка Před 5 lety +1

      @@t0digital про интересные плагины, фишки vimrc, самого вима, всё такое. Видел что можно для разных языков отдельный конфиг делать, вот это было бы круто

    • @t0digital
      @t0digital  Před 5 lety +1

      Хорошо

  • @user-gx3ie5rl1q
    @user-gx3ie5rl1q Před 5 lety

    Привет, какую литературу выбрать для быстрейшего освоения Python?

    • @t0digital
      @t0digital  Před 5 lety +2

      Привет, лови:
      * Если уже работал с другим языком программирования, хороший выбор «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&

  • @DmitryB876
    @DmitryB876 Před 5 lety

    Возвращаясь к вопросу как правильно произносить слово tuple (тапл, тупл, тьюпл) - советы профессионалов :)
    Книга "(O'Reilly-Питер) Простой Python - Современный стиль программирования (Билл Любанович) [2016]", стр.70:
    Вы могли слышать два возможных варианта произношения слова tuple (кортеж). Какой же из них является правильным? Если вы ответите неправильно, станут ли вас называть позером? Не волнуйтесь. Гвидо ван Россум, создатель языка Python, написал (bit.ly/tupletweet): «Я произношу слово tuple как too-pull по понедельникам, средам и пятницам и как tub-pull - по вторникам, четвергам и субботам. В воскресенье я вообще о них не говорю :)».

    • @t0digital
      @t0digital  Před 5 lety +2

      Книжка Любановича одна из лучших на мой взгляд для первоначального знакомства с Python:) И Byte of Python

  • @tyomas134
    @tyomas134 Před 3 lety

    Почему не использьзовать Cython? Например, для строгой типизации переменных.

  • @tabekg
    @tabekg Před 2 lety

    Что насчёт импортов? Они тоже занимают памяти?

  • @user-oi1zl6de8i
    @user-oi1zl6de8i Před 4 lety

    Такое впечатление, что при объявлении Record (5:07) пропущены запятые (всего два поля). Тогда замеры памяти могут быть не точными.

    • @t0digital
      @t0digital  Před 4 lety +1

      Эта запись:
      Record = namedtuple('Record', 'first second third')
      создаёт именованный tuple с тремя полями - first, second, third

    • @user-oi1zl6de8i
      @user-oi1zl6de8i Před 4 lety

      @@t0digital Понял, извините.

    • @t0digital
      @t0digital  Před 4 lety +1

      @@user-oi1zl6de8i все ок!

  • @Denis-ou2tx
    @Denis-ou2tx Před rokem

    Если реализовать датакласс, 1 из атрибутов которого будет являться сложный объект, а не примитив, то как реализовать сравнение экземпляров данного класса? Ожидаю, что есть 2 экземпляра, значения атрибутов которых равны, и при сравнение экземпляров ожидаю True

  • @user-13520sdf
    @user-13520sdf Před 4 lety

    А если вместо named tuple использовать обычные классы? То же самое будет? Ну то есть класс с конструктором, методами, свойствами.

    • @t0digital
      @t0digital  Před 4 lety

      Не то же самое, NamedTuple это ведь именованный кортеж, у него свое специфичное поведение есть, присущее tuple, которого в обычном классе не будет (если его не реализовывать отдельно, конечно)

    • @user-13520sdf
      @user-13520sdf Před 4 lety

      Диджитализируй! Да, я имею в виду если использовать свои классы с некоторым простым поведением, то по памяти то же самое будет? И ещё, к примеру, slots указать, то это, по идее, и быстрее будет и памяти меньше занимать чем named tuple

    • @t0digital
      @t0digital  Před 4 lety

      сравните:)

  • @nobeing6242
    @nobeing6242 Před 4 lety

    Видео получилось о том, что в библиотеке тайпинг..есть нотации типов, которые помогают не ошибиться так как и идэешка с встроенными чекерами просигнализирует об этом, типо чувак ты должен был вместо строк туда класть числа. Так что тема не раскрыта. Кортежи и именованные кортежи весят одинаково. Кортежи можно рассматривать как записи с полями, тип поля которых определяется содержимым. Чтоб потреблять меньше памяти надо использовать сериализацию, либо создать свой метакласс типа struct. Так что тема видоса опять не расскрыта.

    • @t0digital
      @t0digital  Před 4 lety

      Нет, вы не правы, чтобы потреблять меньше памяти, надо переписать всё просто на asm. Предложение в видео использовать вместо list/dict кортежи, удобнее которых именнованные кортежи, удобнее которых именнованные типизированные кортежи - это всё фигня, struct тоже фигня. ASM, вот как надо писать Python.

  • @user-ne4bd3ry1n
    @user-ne4bd3ry1n Před 4 lety

    Вы пайтону 10 ки гигабайт в сложные структуры данных засовываете? и как производительность приложения при этом?

    • @t0digital
      @t0digital  Před 4 lety

      Приложения и задачи бывают разные, и иногда это здравая идея обрабатывать данные именно так. Это не реалтайм задача в вебе, нормально все себя чувствует

  • @user-qj5jw3mx6t
    @user-qj5jw3mx6t Před 5 lety +1

    tuple по моему произносится как "тьюпл". Спасибо за видео, тоже борюсь за оптимизацию работы питоновских программ

    • @t0digital
      @t0digital  Před 5 lety

      Да, вы правы, надо стремиться к правильному произношению. Спасибо!

    • @DmitryB876
      @DmitryB876 Před 5 lety

      Как раз по разному произносят это слово носители английского языка. Кто-то тьюпл, кто-то тапл - нет единого мнения. Ребята из Postgres Professional называют их тапл, а в PostgreSQL одни сплошные таплы кругом :) Вот ещё пример: ru.forvo.com/word/tuple/

    • @DmitryB876
      @DmitryB876 Před 5 lety

      Еще из неоднозначных Issue: ru.forvo.com/word/issue/ Но здесь четко видно разделение по англичанам и американцам.

  • @user-hg8rp9ku7v
    @user-hg8rp9ku7v Před 4 lety

    Можно же по сути адски упороться и использовать ctypes )0))0)

  • @legendabs1110
    @legendabs1110 Před 5 lety

    А если я у vim(e) написал програму,как его сохранить в апк файл

    • @t0digital
      @t0digital  Před 5 lety

      Скомпилировать. Вим это редактор текста, не компилятор.

    • @legendabs1110
      @legendabs1110 Před 5 lety

      @@t0digital а если я скомплилирую в онлайн компиляторе я смогу запустить на телефоне?

    • @t0digital
      @t0digital  Před 5 lety

      @@legendabs1110 ну в целом можно. Я не пробовал)

    • @legendabs1110
      @legendabs1110 Před 5 lety

      @@t0digital ну если вам не трудно снимите виедо я буду очень рад😊

    • @t0digital
      @t0digital  Před 5 lety

      По мобильной разработке навряд ли на этом канале в ближайшее время будет материал. Не самая сильная наша компетенция на сегодня

  • @petersafronow5149
    @petersafronow5149 Před 4 lety

    Что за IDE?

  • @maxburner8338
    @maxburner8338 Před rokem

    148тыс))

  • @TheUnitto
    @TheUnitto Před 4 lety

    А ничего что словать это хешмапа со всеми вытекающими, а датаклас это обьект с вализациями? В то время как именованый кортеж это просто хранилище? Не резировое как хешмапа и без валидации как датаклас?

  • @user-xg8qt8ky1s
    @user-xg8qt8ky1s Před 5 lety

    Листинги показывай на однородном не прозрачном фоне! Именованный кортеж занимает столько же места как и обычный, но нужно 10 раз подумать перед тем как его использовать. Например его нельзя нормально сериализовать, его могут не понимать нужные библиотеки и драйверы БД. В общем пользуйтесь кортежами и всё будет хорошо.

    • @t0digital
      @t0digital  Před 5 lety

      Именованные кортежи сериализуются идентично обычным gist.github.com/alexey-goloburdin/18c82fd011379a83a70aae739d0296d9

    • @user-xg8qt8ky1s
      @user-xg8qt8ky1s Před 5 lety

      @@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  Před 5 lety

      ​@@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 Před 5 lety

      @@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  Před 5 lety

      Написали неработающий код, ну бывает:) Вот работающий - gist.github.com/alexey-goloburdin/18c82fd011379a83a70aae739d0296d9
      Красиво ли использовать globals? Нет. Реальна ли задача, при которой надо генерить новые типы данных в цикле? Нет, но даже если и да - это плохая практика. Добавляет ли namedtuple своих особенностей в код, которых нет в tuple? Конечно. Значит ли это, что не надо использовать namedtuple вместо tuple? Нет, в общем случае namedtuple гораздо более красивый и удобный способ представления данных, чем tuple, потому что более читаемый и очевидный.
      sometuple.first_name - лучше, чем sometuple[0].

  • @doomymax577
    @doomymax577 Před 5 lety

    А где привет котаны?

  • @nickolayfetlistov4416
    @nickolayfetlistov4416 Před 3 lety

    а как же pandas , numpy???

    • @t0digital
      @t0digital  Před 3 lety

      а как же научный калькулятор???

    • @nickolayfetlistov4416
      @nickolayfetlistov4416 Před 3 lety

      @@t0digital не понял вашего сарказма