germn
@germn

Как реализовать цепочку callback'ов в python?

В javascript я могу сделать так:

var some = 100;

var param1 = 1;
func1(param1, function(res1) {
    
    var param2 = res1 + some;
    func2(param2, function(res2) {
        // ...
    });
});


В php я могу сделать так:

$some = 100;

$param1 = 1;
func1($param1, function($res1) use ($some) {
    
    $param2 = $res1 + $some;
    func2($param2, function($res2) {
        // ...
    });
});


Как сделать это в python?
  • Вопрос задан
  • 5954 просмотра
Решения вопроса 1
stepank
@stepank

в питоне в качестве анонимных функций есть только lamba, на которые есть очень жесткие ограничения, например, что их тело может содержать только одно выражение, т.е. простым языком - внутри лямбды не может быть очень много логики. поэтому для более сложных конструкций нужно создавать именованые функции, например:

some = "hello"
def func_1():
    print some
    one_more = "world"
    def func_2():
        print some, one_more
        def func_3():
            print "hello world"
        return func_99("bla-bla", func_3)
    return func_100("bla-bla", func_2)

есть различные варианты, как избежать большой вложенности, но это непосредственно к теме вопроса не относится. кроме того, если вы работаете с Twisted, то, конечно, нужно изучить Deferred, т.к. без них в этом фреймворке вообще никуда. насчет Tornado не знаю, вероятно, там есть какой-то похожий механизм. если вы не используете ни один из указанных фреймворков, то саму концепцию Deferred все равно есть смысл изучить, т.к. есть реализации не привязанные к этим фреймворкам, но с помощью Deferred работа с цепочками колбеков становится гораздо удобнее

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы