我有一個情況我需要返回一個列表中找到的第一個項目,我該如何返回它,當我用遞歸:從遞歸函數返回堆棧變量的最佳方法是什麼?
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' ])
我明白,返回返回到調用堆棧,但蔭尋找最佳實踐而不使用全局變量來獲得價值?
您錯過了'else'情況的'return'關鍵字:'return get_hostname_r(lst [1:])'。另外,讓單個函數返回的值都是相同類型是很好的設計;使用例外來指示錯誤,以及出色的結果。 – chepner
將'get_hostname(lst [0])'提取到一個變量中,以便它只被調用一次。這不會解決你的問題,它只是困擾我,因爲它效率低下。此外,這不是一個很好的遞歸用例,我會建議只用循環來做這件事。 –