以下方法是指定一个时间段,然后根据offse_seconds为间隔,生成一个数组的递归方法
特殊说明:递归会有一个深度问题,超过递归深度会报错,所以这里k线时间不建议使用递归!
【非常重要】递归使用闭包的方式保存局部变量,由于Python无法使用匿名函数,所以在函数内部定义一个新的函数即可,等价于JavaScript的匿名函数原理!
@classmethod
def generate_timedelta_list_from_offset_recursive(cls, start_datetime, end_datetime, offset_seconds):
"""
功能:使用递归的方式,生成offset_seconds时间生成一个时间间隔数组list
特殊说明:递归会有一个深度问题,超过递归深度会报错,所以这里k线时间不建议使用递归!
:param start_datetime: 开始日期,兼容str或datetime对象
:param end_datetime: 结束日期,兼容str或datetime对象
:param offset_seconds: 间隔秒数,必须是整数
:return: 基于offset_seconds的时间间隔数组list
"""
start = start_datetime if isinstance(
start_datetime, datetime) else cls.generate_datetime_from_str(start_datetime)
end = end_datetime if isinstance(
end_datetime, datetime) else cls.generate_datetime_from_str(end_datetime)
timedelta_list = [cls.datetime_iso8601_format(start)]
# 内部创建一个递归方法来处理依据间隔时间分别添加到timedelta_list
def generate_timedelta_list_from_offset(start, end, offset_seconds):
temp_time = start + timedelta(seconds=offset_seconds)
if temp_time >= end:
timedelta_list.append(cls.datetime_iso8601_format(end))
return timedelta_list
else:
timedelta_list.append(cls.datetime_iso8601_format(temp_time))
generate_timedelta_list_from_offset(temp_time, end, offset_seconds)
return timedelta_list
return generate_timedelta_list_from_offset(start, end, offset_seconds)