函数返回值
广大的互联网朋友们,下面这个代码为什么会返回none啊:list1 = []
def bin1(a):
if a:
list1.append(a%2)
bin1(a//2)
else:
list1.reverse()
return list1
print(bin1(10))
谢谢大家了! 这个return只是返回给调用它的bin1了,而不是返回给主程序。
以bin1(1)为例:
list1----
bin1(1)
list1.reverse()
返回list1给调用它的bin1
回到上一层的bin1
没有返回值。
bin1(0)没有递归,就不会返回None了。
本帖最后由 jackz007 于 2019-12-19 22:47 编辑
if a:
list1.append(a%2)
bin1(a//2)
else:
list1.reverse()
return list1
return 语句位于 if 的 else 语句块中,属于有条件执行,就是说,这个函数不是全天候都有返回值,只是在满足特定条件(a = 0)的时候才会有返回值。函数最后返回的时候肯定没有通过 return 语句,而函数如果不通过 return 返回,其返回值自然就是 None。
只要调整 return 语句的缩进,把有条件返回改为无条件返回便可解决此问题:
if a:
list1.append(a%2)
bin1(a//2)
else:
list1.reverse()
return list1
楼主代码的思路是先取余后递归,如果改变一下顺序,先递归后取余,就不再需要 else 和 list1 . reverse() 语句了,从而使代码得到简化:
def bin1(a):
if a:
bin1(a // 2)
list1 . append(a % 2)
return list1
list1 = []
print(bin1(10)) jackz007 发表于 2019-12-19 22:34
return 语句位于 if 的 else 语句块中,属于有条件执行,就是说,这个函数不是全天候都有返回值 ...
感谢感谢!! 冬雪雪冬 发表于 2019-12-19 22:18
这个return只是返回给调用它的bin1了,而不是返回给主程序。
以bin1(1)为例:
list1----
明白了谢谢!
页:
[1]