首页 > 解决方案 > 在递归函数输出中以不同方式返回变量和打印变量

问题描述

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 给出了我想要的输出 ['August 10', 'August 11', 'August 12', 'August 13', 'August 14']

返回 OUTER 返回 None

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

标签: pythondatetimerecursionprinting

解决方案



据我了解,您的代码的目的是打印从下周一开始的 5 个工作日。当递归调用返回时,它会在调用之后立即进入该行。printFun [这里][1] 的图像可能会有所帮助。
在您的情况下,在递归的每次迭代中,外部都是 [] ,除非您打印它。
要修复您的代码,请执行以下操作:
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']

谢谢


推荐阅读