python - 在递归函数输出中以不同方式返回变量和打印变量
问题描述
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
为什么我不能让它返回与打印的相同?
解决方案
据我了解,您的代码的目的是打印从下周一开始的 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']
谢谢
推荐阅读
- javascript - 从流类型创建一个数组?
- flexbox - 图标下的文本,flexbox
- python - 如何在自定义变压器中访问 sklearn 列变压器
- prometheus - 如何从 Prometheus 中的相同指标中提取不同的过去值?
- javascript - 如何使用 JavaScript 或 jQuery 进行 json 格式化
- javascript - 带有列表项菜单的代码 javascript 有什么问题?
- css - CSS 内容之前在“BOX”之外
- android - 是否可以在我的 Android 应用(约会应用)中提供与 google play 不同的计费方式?
- javascript - 如何对文件对象使用对象解构
- r - 与geom_text重叠,如何避免?