python - 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
...
我的问题是关于'返回“家”'的含义。它只是意味着停止。那里有“家”的意思吗?
解决方案
如果您要在变量赋值中运行该函数,您实际上会得到“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))
将具有与我的示例相同的结果。
推荐阅读
- reactjs - 我正在尝试使用 React 和 Axios 调用 Weather API 我正在尝试 console.log 结果但它说未定义... :(
- javascript - 使用 GetElementsByClassName 检查复选框值以及是否以编程方式检查了复选框
- kubernetes - 我可以在离线环境中部署 Kubernetes Dashboard 吗?
- r - 使用group_by和summary时如何输出全部信息
- javascript - 带拖放功能的角度自动滚动
- asp.net - HTTP 错误 404.17 - 未找到 - .NET - IIS 10
- java - [android]如何使用 'ernestoyaquello' 发布的垂直步进器 github 代码
- python - 更改矩形的 X 值实际上不会在 GUI 中移动它
- bash - 通过本地 bash 脚本在 ssh 服务器中导航
- sql - AWS Athena Table 每一列的行数