Size: a a a

2020 October 19

S

Stan in PiterPy Meetup
Maxim Vasilev
А почему отказываться от датаклассов так себе идея?
Потому что они очень удобные. На питоне пишут не для скорости исполнения, а для скорости разработки, и датаклассы про это
источник

E

Eugene in PiterPy Meetup
Stan
а зачем?
"зачем" - это слишком общий вопрос.

Например, ты делаешь библиотеку. Кому-то удобнее будет использовать ReturnType целиком и таскать его куда-то, а кому-то из твоей функции нужно только одно значение, он сможет взять его по имени или по индексу или через распаковку.

result = compute()
value, residual = compute()
value, *_ = compute()
источник

S

Stan in PiterPy Meetup
Maxim Vasilev
Если тебе нужно работать с питоновской экосистемой и не нужен механизм наследования ни в каком виде, ты просто передаешь строчки с данными
Это не понял. Раскрой мысль, пожалуйста.
источник

S

Stan in PiterPy Meetup
Maxim Vasilev
В случае с датаклассами у тебя будут происходить ненужные копирования, в случае с NamedTuple их будет меньше
Что в тупл, что в датакласс нужно поля скопировать, не вижу разницы.
источник

MV

Maxim Vasilev in PiterPy Meetup
Если у тебя они изначально в туплах, то копирования не будет емнип
источник

E

Eugene in PiterPy Meetup
Stan
Что в тупл, что в датакласс нужно поля скопировать, не вижу разницы.
датакласс выполняет больше работы под капотом чем namedtuple, namedtuple более эффективный с точки зрения производительности и потребления памяти. Создание экземпляра и доступ к элементам требует меньше ресурсов и работает быстрее.
источник

S

Stan in PiterPy Meetup
Maxim Vasilev
Если у тебя они изначально в туплах, то копирования не будет емнип
источник

E

Eugene in PiterPy Meetup
В общем, если у меня в программе есть какие-то сущности, хранящие данные, в которых может быть какая-то логика, но которые не создаются в большом количестве, я выберу датаклассы. А если мне надо читать строчки из CSV файла и парсить их, я выберу что-то полегче, в идеале namedtuple или __slots__-объект
источник

S

Stan in PiterPy Meetup
Eugene
датакласс выполняет больше работы под капотом чем namedtuple, namedtuple более эффективный с точки зрения производительности и потребления памяти. Создание экземпляра и доступ к элементам требует меньше ресурсов и работает быстрее.
Да, но это имеет смысл только если ты, например, делаешь обёртку над бинарной библиотекой для каких-то высокопроизводительных вычислений. В обычной бизнес-логике NamedTuple скорее вредны
источник

MV

Maxim Vasilev in PiterPy Meetup
Интересно, спасибо
источник

MV

Maxim Vasilev in PiterPy Meetup
источник

S

Stan in PiterPy Meetup
Хм. Спасибо, не знал)
источник

S

Stan in PiterPy Meetup
Но как я выше писал, кажется вредным в питоне такими мелочами заниматься
источник

MV

Maxim Vasilev in PiterPy Meetup
Ну, для бизнес логики естественно вредно, но для написания всяких библиотек, критичных по скорости наверное окей
источник

MV

Maxim Vasilev in PiterPy Meetup
Да и использовать NamedTuple в конкретном месте гораздо быстрее, чем писать экстеншен для питона на чем-нибудь без рантайма
источник

MV

Maxim Vasilev in PiterPy Meetup
В плане скорости разработки
источник

MV

Maxim Vasilev in PiterPy Meetup
Eugene
В общем, если у меня в программе есть какие-то сущности, хранящие данные, в которых может быть какая-то логика, но которые не создаются в большом количестве, я выберу датаклассы. А если мне надо читать строчки из CSV файла и парсить их, я выберу что-то полегче, в идеале namedtuple или __slots__-объект
Слоты кстати еще для стриминг аналитики неплохо подходят, у меня был положительный опыт использования вместе вот с этой библиотекой https://toolz.readthedocs.io/en/latest/streaming-analytics.html#
источник

E

Eugene in PiterPy Meetup
Maxim Vasilev
Слоты кстати еще для стриминг аналитики неплохо подходят, у меня был положительный опыт использования вместе вот с этой библиотекой https://toolz.readthedocs.io/en/latest/streaming-analytics.html#
Есть ещё такая библиотека recordclass, там пошли ещё дальше :)
вот их статья на тему
https://habr.com/ru/post/455722/
источник

MV

Maxim Vasilev in PiterPy Meetup
Спасибо! Будем посмотреть.
источник

MK

Maxim Koltsov in PiterPy Meetup
слушайте
источник