Python的for循环里需要根据模式选择不同的计算公式,该怎么设计


def datas(cal_mode):
    '''
    
    :param cal_mode:  计算公式
    :return: 
    '''
# for循环前面有很多代码
    for x in range(5):
        td=x
        # 公式=td*2 # 这里的计算公式是不固定的,需要根据模式选择不同的计算公式, 可能td+2 或者更复杂
        print(td*2)
#  for循环后面也有很多代码


我的mode函数似乎要放在循环内,每次去判断,又很啰嗦的感觉,因为公式选择了就固定了,不需要每次循环判断
def mode_a(td):
    return td*2


def mode_b(td):
    return td+2


def mode_c(td):
    return td+2*2


如上伪装代码,我希望在不同cal_mode模式下选择不同的公式,但是如果每次在循环内判断选择计算模式,for循环如果很大,就很浪费。

里面的td依赖于for循环,不知道如何提取出去?

有没有简单的办法,我不想每个计算公式都重写一份代码

可以将函数作为参数传给前面的函数。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7574355
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Python中使用for循环无法完全删除带有连续相同数字的列表,这个问题是由for自身造成的
  • 除此之外, 这篇博客: Python 内存泄露问题,详细讲解如何查找问题以及解决方法中的 2、看逻辑代码,因为是对量比较大的数据进行模型预测,所以第一步想的就是 可能是中间数据来不及释放导致的内存泄露。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 于是就在代码末尾加入了python回收机制gc,手动回收。

    del data,c_data
    gc.collect()
    

    看看代码执行后生成的memory_profiler.log 文件

    在这里插入图片描述
    line 是第几行代码运行完后增加的内存,可以看到这里加载tensorflow的库后增加了136mb内存。

    在这里插入图片描述
    可以看到对生成数据进行回收,但是结果并没有减少到内存,显示累计使用内存数还是324m。
    说明并不是中间数据量大的问题,在正常使用完data,clean_d这些数据后,内存就会被自动回收了。

    另外一个需要注意的地方就是正常在导入各个库的时候,一个进程只会加载一次,也就是在同个进程中,第一次import tensorflow 的时候需要消耗内存,剩下的任务就不需要再加载tensorflow消耗内存了。

    为了看到对比,对相同的任务,在同个进程中执行了3次。
    我们依次看看结果。

    在这里插入图片描述
    可以看到在执行第二个任务的时候,内存的消耗还是保持324m,就算是import 库 也不会再增加内存了。
    也就是这部分内存是常驻内存。
    在第三次任务结束的时候,可以看到消耗内存如下
    在这里插入图片描述
    其实并没有增加多少。

    这里是因为我还没将模型加载的部分放到代码里面。
    上面只是为了测试中间数据是否有被回收掉。

  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 讲师简介,量化交易介绍及自动化交易演示小节, 巩固相关知识点