包含自身函数的函数?
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 限制了调用堆栈的大小。)
标题有点奇怪,不知道具体怎么称呼,请大家见谅。。。。。。。。。。。
我在网上找到了这样的代码:
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 限制了调用堆栈的大小。)