【问题标题】:What is the equivalent of a Swift completion block in Python?Python 中的 Swift 完成块相当于什么?
【发布时间】:2016-07-03 16:51:25
【问题描述】:

在 Swift 中,我们可以编写一个带有完成块的函数,如下所示:

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

然后当我们调用它时,我们可以在该块内放置一些东西,以便在它完成后执行它的进程:

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

Python 中的等价物是什么?

【问题讨论】:

  • Python 函数只是按顺序执行。
  • 所有代码按顺序执行。所以即使是 API 调用,在前一个函数收到响应之前,它不会进行到下一行?如果我希望一个函数开始执行,但希望程序在它工作时继续运行,一旦该函数完成,我希望它执行别的东西怎么办?
  • 除非你使用多线程,否则函数将按顺序执行。
  • @spacemonkey "如果我希望一个函数开始执行,但希望程序在它工作时继续运行 (...)" 会是一个很好的问题:)
  • Gotchya。好吧,如果有人想知道你是如何使用 Swift 实现的,那就是上面的代码 :)

标签: python swift


【解决方案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() 调用之前使用异步代码,否则这些行将按预期顺序执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 2017-11-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多