python return理解不到_【Python】python递归,else不写return会出错,该如何理解?

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上测试的,大家可以试试。

回答

考虑这样两个函数:

def a():

return 'find'

def b():

a()

i = a()

j = b()

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

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

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

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

你自己可以test一下的,其实你说的逻辑程序根本没执行,因为执行到else语句的时候,没有return,直接就返回none了,都根本没有递归好吗?还谈什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值