素材牛VIP会员
python递归,else不写return会出错,该如何理解?
 郑***y  分类:Python  人气:1165  回帖:5  发布于6年前 收藏
def func(value):
    if value[-1] == 10:
        print 'stop:', value[-1]
        return 'find'
    else:
        del value[-1]
        func(value)  # 注释1

在用递归的时候,如果你的else的最后的语句,就是去执行func函数(对应注释1),像上面这样写,当我们给参数
value = range(1, 20),最后返回的是None。

如果修改成这样:return func(value) 那么你的代码可以返回‘find’。

我在调试里面,当多次递归后,满足条件进入if语句,最后return了,不是应该结束函数吗?可是调试进行下一步,还走到了注释1 这里,然后返回 None。
不经意写了这样一个递归,然后举了这个例子,发现只要else不用return返回就会导致最后的结果是None, 既然if都return了,函数应该返回了吧?我猜测这是一个什么机制,求大神解释一下。
代码是在python2.7.3上测试的,大家可以试试。

 标签:python
相关内容推荐:

讨论这个帖子(5)垃圾回帖将一律封号处理……

Lv6 码匠
訫***3 移动开发工程师 6年前#1

你这是个递归函数啊,最后的返回值取决于最外围的return,而你这啥都没写,所以默认return了None

Lv4 码徒
gy***23 JAVA开发工程师 6年前#2

python函数执行到最后一行没有遇到return的话就默认返回None,
所以你的函数等价于下面的代码:

def func(value):
    if value[-1] == 10:
        print 'stop:', value[-1]
        return 'find'
    else:
        del value[-1]
        func(value)  # 注释1
    return None
Lv1 新人
BO***OS 职业无 6年前#3

注意# 注释1这行代码,你既然调用了函数,应该会得到'find'值,但你不return值给外部调用函数,肯定是None

Lv4 码徒
阵***香 交互设计师 6年前#4

考虑这样两个函数:

def a():
    return 'find'
    
def b():
    a()

i = a()
j = b()

你觉得ij里分别是什么值呢?简单来说,b是“调用a并返回”,并不是“调用a并返回a的返回值”,b是没有返回值的,也就是返回None。这里的a相当于func里的if分支,b相当于func里的else分支。

Lv4 码徒
逆***团 Linux系统工程师 6年前#5

python 3 的教程里对这个有描述——http://www.pythondoc.com/pythontutorial3/controlflow.html

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取