【问题标题】:function that contains a function of itself?包含自身函数的函数?
【发布时间】:2017-10-26 22:55:45
【问题描述】:

标题有点奇怪,但我不知道具体是怎么称呼的,所以请原谅我用抽象的标题......

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

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) in

return x + lcs(xs, ys)

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

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

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

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

【问题讨论】:

标签: python python-3.x recursion key lcs


【解决方案1】:

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


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

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

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

如果你调用g(),它会输出

hi
new function

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

【讨论】:

  • 你能解释一下max函数的第三个参数是做什么的吗?
  • 您应该将其作为一个单独的问题提出。 (或者,更好的是,阅读max 函数的文档。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多