python中的延续

cob*_*bie 6 python

是否有任何等效的python延续构造。我一直在阅读有关续篇的信息,只是好奇而又想知道,因为文档中对此一无所知。

Ada*_*cin 1

我的问题更多的是如果Python支持延续那么它们如何表达?

它们在 Python 中的表达方式与任何其他没有call/cc 的语言相同:通过将一个函数作为延续参数传递给另一个函数。考虑一个非常愚蠢的例子,将延续应用于两个数字的和。在 ML 中,你可能会写

fun plus(x, y, k) = k(x + y)

plus(2, 4, print o Int.toString)
Run Code Online (Sandbox Code Playgroud)

打印 6。

但在Python中你可能会写

def plus(x, y, k):
    return k(x + y)

plus(2, 4, lambda n: print '%d' % n)
Run Code Online (Sandbox Code Playgroud)

它还打印 6。

  • 这*不是*延续。延续的执行可以由语言暂停和恢复。`plus` 不能。它只是一个函数值,而不是延续。 (9认同)
  • 这是一个带有函数参数的简单方法调用。这不做延续所做的事情。-1 (7认同)
  • @AHM 正如我在答案中所说,这是一个非常愚蠢的例子。然而,这实际上是连续传递,因为“plus”正在使用一些(在本例中非常简单)计算的结果调用连续“k”。Python 不会优化尾部调用,因此无论应用程序如何,足够长的延续链都会导致堆栈崩溃。 (2认同)