amarao: (Default)
2024-11-09 10:57 am
Entry tags:

Дурацкий трюк или умно?

Мне нужен атом для обозначения "all" (или "any", мол, предназначено для всех вариантов). Я могу сделать строку "all" как атом (нишу), но это выглядит как-то криво.

И вот идея. Просто any. Есть такая функция в питоне. У неё есть id. Соответственно, foo = any (или даже, потому что функция all тоже есть).

Насколько это гениальное идиотское изобретение, использовать функцию (как пассивный объект) в качестве семантического флага "любой"?
amarao: (Default)
2024-09-14 01:23 pm
Entry tags:

Design time machine

Если бы у меня была возможность поменять одну вещь в питоне, я бы поменял то, как работают '"""', и сделал бы их yaml-подобными, с возможностью сохранять отступы.

У всех остальных вещей есть глубокие причины, но тут всё просто - не додумали. В то время не было ямла с восхитительным `foo:|`, и люди ещё не умели справляться с inline indentation.
amarao: (Default)
2023-11-17 11:26 am
Entry tags:

СЯУ что yield возвращает значение в питоне

def foo(bar):
a = yield bar
return a

Продолжаю думать. Очень серьёзное открытие. Я не знаю, когда его завезли, раньше yield просто трансформировал функцию в генератор. А теперь можно конструировать генераторы прямо в функции. Звучит офигенно.

(По мотивам https://github.com/suned/stateless)
amarao: (Default)
2022-11-09 03:51 pm
Entry tags:

Вернуть пустое

Вот я прям питон начинаю не любить. Казалось бы, утиная типизация и всеобщая приятность. Никакого фашизма, всё можно.

А вот вам простая задачка, которую на rust'е generic'и решают в одну строчку, а на питоне я не знаю как (в разумные усилия).

Есть функция, которая читает вывод (утилиты) и возвращает распашенный json. Она достаточно generic, чтобы в зависимости от вывода утилиты вернуть list или dict.

Теперь я хочу добавить фэнсервиса - если вывод пустой, то возвращать пустой элемент (список или словарь). Как? КАК?

>>> class foo(dict,list):
... pass
...
Traceback (most recent call last):
File "", line 1, in
TypeError: multiple bases have instance lay-out conflict
amarao: (Default)
2022-06-18 04:41 pm
Entry tags:

Изящно. Читаемо?

Проверка, что в командной строке есть аргумент, начинающийся с --ansible-inventory

if any([a.startswith("--ansible-inventory") for a in sys.argv]):
    ...
amarao: (Default)
2022-01-20 02:42 pm

тонкие градации дерьма

Питон местами хорош, но местами вызывает глубокую неприязнь из-за крайне низкой гигиены.

>>> float(math.nan) is math.nan
True
>>> float(1/math.nan) is math.nan
False

(Если кто-то не понял - я негодую, что питон не осилил сделать math.nan синглтоном, как None).
amarao: (Default)
2021-10-26 03:59 pm

Питон - это простой и понятный язык, с простыми и понятными сообщениями об ошибках

>>> type(type(None))(repr(None),(None, None),{None:None})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases