标题有点奇怪,但我不确切地知道这是怎么称呼的,所以请原谅我的抽象标题....
我在网上找到了这样的代码:
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)是如何工作的,但我不知道第三个参数是做什么的。 “密钥”是什么意思,为什么“len”被用作“密钥”的值?
答案 0 :(得分:4)
这称为递归。在您调用函数之前,函数体不会被评估。把身体里的lcs
想象成一个名字;当你调用该函数时,Python将应用它应用于任何名称的相同查找规则来查看它所引用的内容;通常*它指的是相同的功能。
*通常情况下,因为你可以通过玩一些带有名字的游戏来打破递归功能。
def foo():
print("hi")
foo()
g = foo
def foo():
print("new function")
如果您致电g()
,则会输出
hi
new function
而不是打印包含hi
的无限行。 (好吧,几乎是无限的;最终你会得到RuntimeError
,因为Python会限制调用堆栈的大小。)