首页 > 解决方案 > Python中函数末尾的`return“DONE”`是什么意思?

问题描述

就上下文而言,这段代码是由 Matt Parker 在 Numberphile 频道的一段视频中编写的,他谈到了乘法持久性。代码是用 Python 2 编写的,我的问题是关于return "DONE".

显然,这可以防止生成无限循环,因为很明显运行带有和不带有该行的示例(如下):

def per(n, steps = 0):
    if len(str(n)) == 1:
        print "TOTAL STEPS " + str(steps)
        return "DONE"

    steps += 1
    digits = [int(i) for i in str(n)]

    result = 1
    for j in digits:
        result *= j
    print result
    per (result, steps)    

per(27)

# 14
# 4
# TOTAL STEPS 2

现在,没有该行的相同代码return "DONE"不会结束循环,并产生:

14
4
TOTAL STEPS 2
4
TOTAL STEPS 3
4
TOTAL STEPS 4
4
TOTAL STEPS 5
4
TOTAL STEPS 6
4
TOTAL STEPS 7
4
TOTAL STEPS 8
4
TOTAL STEPS 9
4
TOTAL STEPS 10
4
TOTAL STEPS 11
4
TOTAL STEPS 12
4
TOTAL STEPS 13
4
TOTAL STEPS 14
4
...

我的问题是关于'返回“家”'的含义。它只是意味着停止。那里有“家”的意思吗?

标签: pythonpython-2.7loops

解决方案


如果您要在变量赋值中运行该函数,您实际上会得到“DONE”。我假设您的意思是“DONE”而不是“HOME”,因为return "HOME"您的示例中没有。

例如:

x = per(7)
print(x)

将打印通常的输出,并DONE在您调用print(x). 因为 7 是个位数if len(str(n)) == 1,所以第一次运行时满足条件。

TOTAL STEPS 0
DONE

不过,这个函数会调用自己,这使得学习这些东西成为一个令人困惑的选择,因为这是相当不寻常的。如果我们用一个多于一位的数字运行脚本,我们会得到None.. 因为它从不运行return语句,它的返回值是 python 默认值,它是一个 NoneType:

x = per(27)
print(x)

结果:

14
4
TOTAL STEPS 2
None

因为 27 不满足具有单个数字的条件.. 脚本调用自身并打印出结果.. 直到它最终使用 4.. 满足条件并打印出 TOTAL STEPS 行。

要查看此值,我们必须修改函数:

def per(n, steps = 0):
    if len(str(n)) == 1:
        print("TOTAL STEPS " + str(steps))
        return "DONE"

    steps += 1
    digits = [int(i) for i in str(n)]

    result = 1
    for j in digits:
        result *= j
    print(result)
    x = per(result, steps)
    print("Inner return", x)


x = per(27)
print("Outer return", x)

结果:

14
4
TOTAL STEPS 2
Inner return DONE
Inner return None
Outer return None

值得庆幸的是,您不必太担心返回值.. 因为您没有在示例中捕获变量中的返回值.. 单独使用return会产生相同的结果。即在该点停止运行该函数,并在per(27)有一个函数之后继续运行.. 不过,这可能是查看此函数中发生的情况的有用方法。

使用变量赋值=并不是使用返回值的唯一方法......只是演示正在发生的事情的最简单方法。例如,只是运行print(per(27))将具有与我的示例相同的结果。


推荐阅读