[英]Python: Function always returns None
我有一些 Python 代码,基本上如下所示:
my_start_list = ...
def process ( my_list ):
#do some stuff
if len(my_list) > 1:
process(my_list)
else:
print(my_list)
return my_list
print(process(my_start_list))
奇怪的是: print(my_list)打印出正确的内容。 但是,打印函数返回值的第二个打印语句总是打印“无”。 即使我用return("abc")替换了正常的 return 语句,它仍然是 None。
由于变量的内容似乎在 return 语句前一行是正确的,我不知道从哪里开始调试。 是否存在任何可能导致此问题的常见问题?
这是发生的事情:
process(my_start_list)
。len(my_list) > 1
则执行if
块,并且那里没有 return 语句。 现在,由于else
尚未执行,并且因为这是您拥有 return 子句的唯一地方,所以您返回默认值None
。 要解决此问题,您需要返回process(my_list)
返回的列表。
那是:
def process(my_list):
# do some stuff
...
if len(my_list) > 1:
return process(my_list)
else:
print(my_list)
return my_list
只有当列表中有 1 或 0 个元素时(基本情况),您才返回列表。 您还需要在第一个块中使用 return 语句,在那里进行递归调用,或者深入到基本情况,将长度为 1 的列表返回到下一个级别,然后在剩下的过程中返回None
. 所以你想要的看起来像这样,而不是:
def process(my_list):
# Do some stuff.
if len(my_list) > 1:
return process(my_list) #If you don't return this result, you return None
else:
print(my_list)
return my_list
现在每个案例(不仅仅是基本案例)都有一个返回值,因此该返回值将一直传播到您的初始调用。
您递归调用process
但在调用时绝不会忽略它的返回值。 添加一个return
语句来传递返回值:
def process ( my_list ):
#do some stuff
if len(my_list) > 1:
return process(my_list)
else:
print(my_list)
return my_list
现在,当len(my_list) > 1
为True
,您实际上传递了递归调用的返回值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.