python - Python 函数在第三次使用 None 后返回 none
问题描述
所以我试图解决一些问题并使用给定的逻辑。但即使在每次我尝试返回该值时使用 print 获得正确的值后,输出也是无。
def rt(c):
print "yep",c
cc(c)
def asa():
return 3
def klds(s):
return s+4
def cc(k):
if k!=7:
print k
print 3434
return k
print 2
rt(k+2)
print cc(klds(asa()))
预期输出:倒数第二个值 3434 只是检查函数是否在打印之后执行,倒数第三个值是要返回的值
2
yep 9
9
3434
9
获取输出:
2
yep 9
9
3434
None
解决方案
这是正在发生的事情:
print cc(klds(asa()))
从最内层的嵌套函数开始计算:
- asa() 返回 3,将其发送到 klds()。
- klds() 返回 s + 4,因为 asa 返回 3,s = 3,所以 s + 4 == 7
- 我们现在在 cc() 里面。'if' 块内的所有内容都被跳过,因为 k == 7
- 打印 2,然后调用 rt(),给定 k+2。k 仍然 == 7。
- 在 rt(), 'yep', 9 被打印出来。
- cc() 在 rt() 中使用参数 c (c == 9) 调用。
- 现在再次在 cc() 中。由于 k == 9, k != 7,所以执行 'if' 块。
- 如您所料,将打印 k(等于 9)和 3434。
- 返回值 k。
- 现在已经返回了一个值,步骤 5 中对 rt() 的调用已经完成。我们现在可以继续向下 cc()。但是,那是 cc() 的最后一行,没有返回任何内容,所以默认返回 None
- 您的最后一条打印语句打印默认的无。
本质上,当您在 if 语句中返回值时,return 会将值发送回第一次调用它的执行列表的顶部。当您调用 rt() 时,您首先调用此执行路径,因此返回的值将在此处返回。如果你想返回那个值,你应该把 rt() 返回的东西赋给一个变量,然后返回那个变量
推荐阅读
- python - julia.core.JuliaError:调用 julia 代码时发生异常“ArgumentError”:使用 PyCall
- c++ - 这棵树失去了它的孩子,它只记得最新的。霍夫曼
- vim - VIM 中的颜色高亮函数调用
- c++ - 是否需要将函数声明放在头文件中并将它们的定义放在源文件中?
- java - 致命异常:java.lang.RuntimeException 无法获取应用程序信息
- java - 您可以将 Minecraft 版本的文件夹从 PC 复制并粘贴到 Mac 上吗?
- javascript - 分组条形图上的 D3js 标签
- swift - Swift UITableView numberOfRows 在节中添加或删除行时出错
- xpath - 如何与 sxpath 进行交集
- swift - 如何在 iOS 13 模态屏幕上快速添加导航栏标题