我需要返回列表中找到的第一个项,当我使用递归时,如何返回它
def get_hostname (ifname):
try :
# Do something to get hostname
return hostname
except IOError:
return -1
def get_hostname_r(lst):
if not lst:
return False
if get_hostname(lst[0]) != -1 :
print 'Found ', get_hostname(lst[0])
return get_hostname(lst[0]) # DOESNT WORK
else :
print 'Not found ', get_hostname(lst[0])
get_hostname_r(lst[1:])
print 'return = ', get_hostname_r(['eth1','eth2','eth3','eth4','eth5' ])
我知道返回到调用堆栈,但我在这里寻找最佳实践,而不使用全局变量来获取值
您可以简单地返回值,返回的值将传递给整个递归堆栈:
但更容易阅读的是for循环:
首先,如果你对IO错误无能为力,不要通过返回-1来掩盖它(“1是什么意思?为什么我没有得到一个主机名回来?”)。只需记录
get_hostname
可能引发IOError递归版本也是如此。返回有效的主机名,或者引发异常(或者让未捕获的异常继续)
当然,递归并不是最好的编写方法;使用一个简单的
for
循环来迭代lst
相关问题 更多 >
编程相关推荐