Посты с тэгом байткод


Самая коротка запись асинхронных вызовов в tornado или патчим байткод в декораторе

Сложный асинхронный обработчик в tornado иногда расползается на десятки callback функций, из-за чего становится трудно воспринимать и модифицировать код. Поэтому существует модуль tornado.gen, позволяющий писать обработчик как генератор. Но много yield gen.Task(...) тоже выглядит не очень. Поэтому в порыве бреда я написал упрощающий запись декоратор:

До После
@asynchronous
@gen.engine
def get(self):
    result, status = yield gen.Task(
        db.users.find_one, {
            '_id': ObjectId(user_id),
        },
    )
@asynchronous
@gen.engine
@shortgen
def get(self):
    result, status << db.users.find_one_e({
        '_id': ObjectId(user_id),
        },
    )

Читать дальше →


Python: Вычисляемые аргументы функций

Введение

Для более-менее сознательного Python программиста следующая форма определения функции не секрет, и вообще довольно часто используемая:

>>> def f(a, b=4)
...     return a+b

Совершенно дурацкая функция, не приносящая практической пользы, но тем не менее удобна в данном случае. В нашей функции b - необязательный аргумент, в чем мы можем убедится сделав несколько вызовов:

>>> f(1,3)
4
>>> f(0)
4
>>> f(2)
6

Итак, тут все очевидно. Что же случится с функцией, если мы передадим аргументу значение по умолчанию как вычисляемое значение? Документация по Python нас