Что эквивалентно блоку завершения Swift в Python?

В Swift мы можем написать функцию с блоком завершения следующим образом:

func thisNeedsToFinishBeforeWeCanDoTheNextStep(completion: () -> ()) {
    print("The quick brown fox")
    completion()
}

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

func thisFunctionNeedsToExecuteSecond() {
   print("jumped over the lazy dog")
}

Что является эквивалентом в Python?

 Eli Sadoff03 июл. 2016 г., 19:04
Если вы не используете многопоточность, функции будут выполняться по порядку.
 Eli Sadoff03 июл. 2016 г., 18:52
Функции Python просто выполняются по порядку.
 Phil Andrews03 июл. 2016 г., 19:02
Весь код выполняется по порядку. Таким образом, даже если это вызов API, он не перейдет к следующей строке, пока предыдущая функция не получит ответ? А что, если я хочу, чтобы функция начала выполняться, но хочу, чтобы программа продолжала работать, когда эта функция будет завершена, я хочу, чтобы она выполняла что-то еще?
 Phil Andrews03 июл. 2016 г., 21:16
Gotchya. Хорошо, в случае, если кому-то интересно, как вы это делаете со Swift, это код выше :)
 Philippe Aubertin03 июл. 2016 г., 19:06
@spacemonkey "А что, если я хочу, чтобы функция начала выполняться, но хочу, чтобы программа продолжала работать, пока она работает (...)"тот сделал бы отличный вопрос :)

Ответы на вопрос(1)

Решение Вопроса

Python рассматривает функции как объекты, то есть вы можете передавать их (как в Swift, хотя я менее знаком с деталями реализации в Swift). Конечно, вы не можете указать тип в параметре, поскольку вы ничего не можете сделать с этим в Python, но это нормально. Реализация будет выглядеть так:

def do_first(completion):
    print("The quick brown fox ")
    completion()

def do_second():
    print("jumped over the lazy dog.")

А затем использовать их:

do_first(do_second)

Если вы не используете асинхронный код передcompletion() вызов первой функции, строки будут выполняться последовательно, как и ожидалось.

Ваш ответ на вопрос