包含自身函数的函数?

function that contains a function of itself?

标题有点奇怪,不知道具体怎么称呼,请大家见谅。。。。。。。。。。。

我在网上找到了这样的代码:

def lcs(xstr, ystr):
    """
    >>> lcs('thisisatest', 'testing123testing')
    'tsitest'
    """
    if not xstr or not ystr:
        return ""
    x, xs, y, ys = xstr[0], xstr[1:], ystr[0], ystr[1:]
    if x == y:
        return x + lcs(xs, ys)
    else:
        return max(lcs(xstr, ys), lcs(xs, ystr), key=len)

我是 python 的新手,我不明白如何在

中调用 lcs(xs, ys)
return x + lcs(xs, ys)

据我了解,lcs() 尚未完全定义,我很困惑如何在自身内部调用自身的函数....

另外,我不知道key = len在做什么

max(lcs(xstr, ys), lcs(xs, ystr), key=len)

我知道 max( 1st, 2nd ) 是如何工作的,但我不知道第三个参数是做什么的。 "key" 是什么意思,为什么 "len" 用作 "key" 的值?

这叫做递归。在您调用它之前,根本不会评估函数的主体。将正文中的 lcs 视为一个名称;当您调用该函数时,Python 将应用与任何名称相同的查找规则来查看它所指的内容;通常*它指的是相同的功能。


*通常,因为您可以通过使用名称玩一些游戏来破坏递归函数。

def foo():
    print("hi")
    foo()

g = foo
def foo():
    print("new function")

如果调用g(),会输出

hi
new function

而不是打印包含 hi 的无限行流。 (好吧,几乎是无限的;最终你会得到一个 RuntimeError 因为 Python 限制了调用堆栈的大小。)