vitus_wagner: My photo 2005 (Default)
vitus_wagner ([personal profile] vitus_wagner) wrote2020-01-05 09:37 pm

Питонистическое.

Выяснил что в стандартной библиотеке питона модуль collections, а в нем функция namedtuple. Позволяющая генерировать наборы данных с именованными полями и нулевым оверхедом. Более того named tuples - hashable, т.е. могут использоваться в качестве индекстов dict или элементов множества. И их очень удобно создавать из списков, dictionaries и тому подобных конструкций.

Теперь хочу реализацию операций реляционной алгебры над set of named tuples.
avysk: (Default)

[personal profile] avysk 2020-01-05 07:09 pm (UTC)(link)
А модуле typing стандартной библиотеки есть NamedTuple, который делает то же самое, но помогает программе развалиться не в рантайме, а при статической проверке типов чем-нибудь типа mypy.
livelight: (Default)

[personal profile] livelight 2020-01-05 08:03 pm (UTC)(link)
А почему именно set? Классическая реляционная алгебра не запрещает дубликаты tuples. Или в питоне "set" тоже их разрешает?
jno: (Default)

[personal profile] jno 2020-01-05 08:13 pm (UTC)(link)
А чего не сиквелобжектс имени бройтмана?
Или хочется свой бэкенд?

[personal profile] kouzdra 2020-01-07 01:31 pm (UTC)(link)
"нормальный" синтаксис для чего-то типа sql придуман четверть века как - у какого-то корейца - три типа коллекций - set (неупорядоченное без дублей), mutliset (с дублями) и bags - с дублями и упорядоченностью.

Элементы - ну обычные довольно по функциональщие записи с именованными полями и "алгебраические" типы (union-ы с именованными вариантами) ну и естественно любые элементы сами по себе могут быть коллекциями и проч.

Все хитрые "запросы" тривиально пишутся в хаскелльного стиля сверточном синтаксисе.

При этом у модели есть прямая проектция в sql, хотя автор развивал и свою: поскольку информации о том "что надо" тут гораздо больше можно этим попытаться воспользоваться для оптимизации.

На деле оказалось просто мало кому интересно - все рисуют на sql и довольны как питоны :)