美文网首页
python 递归,return结果None

python 递归,return结果None

作者: 忘了呼吸的那只猫 | 来源:发表于2019-02-21 10:58 被阅读0次

return的作用是将函数结果返回,即退出def函数模块。大量的教材和网上教程都有说明函数执行遇到return就会结束,返回一个值给调用函数处。常规用法确实是这样,但在递归调用中却存在一个坑,今天就遇到了,举个例子:

一个简单的不断相加的递归小程序:

def add(sum,x,y):
    if sum<10:
        x +=2
        y +=2
        sum=x+y
        add(sum,x,y)
    else:
        sum=x+y
        return sum
print add(0,0,0)

运行程序得到的结果为:

结果却是None,让人匪夷所思,更改一下,在return前打印出返回值:

经过计算,结果确实应该是12,明明已经计算出了正确的值,为什么函数返回值是None呢。经过多方查阅,发现自己踩坑里去了,惯性思维让我认为return必然会使得def函数模块结束返回一个值,可实际上在递归中并不是,如果改变约束条件在return之后函数还会继续递归计算。

真正的原因是此处的return仅仅是上一次递归调用函数本身时候的返回值,而def函数块并没有返回任何值。也就是说这个return仅属于上一次递归调用,并不属于def函数块。也就是说整个def函数块没有return,也就没有出口,自然不会有数据出去,所以得到None,将程序改变一下:

def add(sum,x,y):

    if sum<10:
        x +=2
        y +=2
        sum=x+y
        sum=add(sum,x,y)
        return sum
    else:
        sum=x+y
        print  sum
        return sum
print add(0,0,0)

运行结果:

这次就正确了,程序多次递归后,运行到else,此时返回一个值到达sum=add(sum,x,y)的sum,再return sum,此时为def函数块的返回值。而之前程序运行到sum=add(sum,x,y)时由于等号右边的递归使得程序一直在计算,sum并未被赋值,进而下面的

return sum并未执行,所以只有一个返回值。

相关文章

  • python 递归,return结果None

    return的作用是将函数结果返回,即退出def函数模块。大量的教材和网上教程都有说明函数执行遇到return就会...

  • 递归函数遇到的一些坑

    递归遇到的一些坑。 为什么递归函数会返回None 上面的例子:在调用递归处不加return 就会返回None.因为...

  • python函数

    一. 1.如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写...

  • return;debug。

    python def函数 没有return/return后没有参数,则返回None值 return跳出函数窗口,执...

  • 第2模块第1章16函数—返回值

    return 如果不返回,就会默认执行return None。默认返回None return 带表一个函数的终止。...

  • 2019-08-20

    ''' def a(): return None '''

  • Python3学习笔记 2

    查看帮助 交互环境中:help(函数名) 定义 注:无return语句最终返回None。return None 同...

  • Day 02 2018-03-12

    Function def f(x): no return will return None Tuples元组 an...

  • 函数学习备忘

    return语句def 语句创建函数时,可以用return语句指定返回什么值。 None值None是NoneTyp...

  • Python中的函数注意点

    在Python中,即使你只写一个return也会返回一个变量,那就是None,Python跟ios有一个很大的不同...

网友评论

      本文标题:python 递归,return结果None

      本文链接:https://www.haomeiwen.com/subject/gpxryqtx.html