amarao: (Default)
amarao ([personal profile] amarao) wrote2023-03-01 05:06 pm

batteries included, сказал питон

[[1,2], [3,4]].flatten()
               ^ ERROR: Flatten is not a battery. That's why it's not in the Python.
juan_gandhi: (Default)

[personal profile] juan_gandhi 2023-03-01 04:17 pm (UTC)(link)

FP not available. As Guido said, he does not know categories, and has no plans to learn.

yurikhan: (Default)

[personal profile] yurikhan 2023-03-01 04:38 pm (UTC)(link)
In [6]: list(itertools.chain(*[[1, 2], [3, 4]]))
Out[6]: [1, 2, 3, 4]

In [7]: list(itertools.chain.from_iterable([[1, 2], [3, 4]]))
Out[7]: [1, 2, 3, 4]

ну или в лоб:

In [8]: [x for xs in [[1, 2], [3, 4]] for x in xs]
Out[8]: [1, 2, 3, 4]

[personal profile] photo_viewer 2023-03-01 05:57 pm (UTC)(link)
sum([[1, 2], [3, 4]],[])
yurikhan: (Default)

[personal profile] yurikhan 2023-03-01 07:09 pm (UTC)(link)

Материализация всех промежуточных списков.

yurikhan: (Default)

[personal profile] yurikhan 2023-03-02 01:14 pm (UTC)(link)

Наличие двух различных семантик для одного имени метода — веская причина метод с таким названием не делать частью стандартной библиотеки.

Для строго типизированных языков придётся определить рекурсивный тип Tree[T] как T | List[Tree[T]] и сказать, что функция top имеет тип Tree[T] → List[T]. (А альтернативная семантика — это просто concat или монадный join.)

yurikhan: (Default)

[personal profile] yurikhan 2023-03-02 03:45 pm (UTC)(link)

Не, к дизайну API стандартной библиотеки у меня больших вопросов нет. Магические методы для поддержки перегрузки операторов всё равно нужны. Ну, может быть, они бы смотрелись красивее, если бы назывались не dunder-именами, а operator **, как в C++, но вот как раз метод, имя которого не является валидным идентификатором, магичнее dunder’а. Джойн нескольких строк в строку через разделитель-строку выглядит чужеродно как метод класса списка — потому что лишь малая часть всех списков является списком строк. И ещё джойнить же хочется не только списки, но любые итерабли.

Вот то, что issubclass(bool, int) и !issubclass(int, float) — это печалька.