Python如何使用闭包【同JavaScript类似,但有区别】

以下方法是指定一个时间段,然后根据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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值