在递归函数输出中返回变量和打印变量的方式不同


import datetime
def getDays(day = None):
outer = []
if day == None:
day = datetime.date.today()
if day.strftime('%A') == "Monday":
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
print(outer)
return outer
else:
getDays(day = day + datetime.timedelta(days=1))
print(getDays())

在我的第二个if语句中,我返回OUTER并打印OUTER。打印OUTER给出了我想要的[八月10日,八月11日,八月12日,八月13日,八月14日]输出

返回OUTER返回None

为什么我不能让它返回与打印内容相同的内容?

def getDays(day = None, outer = []):
if day == None:
day = datetime.date.today()
if day.strftime('%A') == "Monday":
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
day = day + datetime.timedelta(days=1)
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
return outer
else:
return getDays(day = day + datetime.timedelta(days=1), outer = outer)

我已经弄清楚了问题所在,我所需要的只是在else语句中包含return,并将变量添加到函数中,这样当它递归返回时,就会携带添加的值。感谢Carcigenicate提供的有用资源。


据我所知,您的代码的目的是从下周一开始打印5个工作日。当递归调用返回时,它会转到调用后的行。printFun〔here〕〔1〕的图片可能会有所帮助。
在您的情况下,除了打印外,每次递归迭代时outer都是[]。
要修复代码,请执行以下操作:
import datetime
def getDays(day = None, outer=[]):
#outer = []         # If not commented then outer is empty when recusion comes back
if day == None:
day = datetime.date.today()
if day.strftime('%A') == "Monday":
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
day = day + datetime.timedelta(days=1)
outer.append(day.strftime(str(day.strftime("%B")) + " " + str(day.day)))
#print(outer)
#return outer
else:
getDays(day = day + datetime.timedelta(days=1))
print(".")   # See how call comes back to this line
return outer
print(getDays())
# or play with other dates
#print(getDays(datetime.datetime.fromisoformat('2020-08-04')))

输出

.
.
['August 10', 'August 11', 'August 12', 'August 13', 'August 14']

感谢

最新更新