繁体   English   中英

被 Python 函数和全局变量思维困住了?

[英]Stuck with python functions and global variables thinking?

我目前正在分析财务数据,因此我需要使用某个函数,比如说某种类型的移动平均线,在代码中的不同时间、不同的时间序列和不同的时间范围内。

要初始化一个函数,我需要声明一个全局变量,但该变量显然会保留上一次迭代的值,就像我制作的以下玩具示例一样,我需要向数组添加一个新的随机变量:

import numpy as np
import pandas as pd

def _foo_append_(x_i,count):               
    global x

    if count==0:
        x = []

    x.append(x_i)

    return x


for i in range(0,10):
    rv_1 = np.round(np.random.normal(10,5),decimals=2)
    rv_2 = np.round(np.random.normal(22,3),decimals=2)

    keep_1 = _foo_append_(x_i=rv_1,count=i)
    keep_2 = _foo_append_(x_i=rv_2,count=i)

在这种情况下,我显然得到了 20 个元素的 bot keep1 和 keep2,但是这两个数组都应该由 10 个元素组成。

所以同样,它不是关于特定功能,而是如何处理这样的需求。

我需要一个每次都被调用的函数,它自己创建一个新的 UNIQUE 全局变量,以便这个变量成为我的输出

  • 现在我的策略是创建一个模块,在其中我构建了几个相同的函数,例如: _foo_append_01()_foo_append_02() 、...、 _foo_append_N()在每个函数中,我将有不同标记的全局变量。

该解决方案有效,但我认为这是构建软件的非常糟糕的方式。

同样,它不是关于特定的代码或功能,而是如何处理这种想法。

我应该如何思考和构建满足我需求的最佳解决方案? 谢谢

我很难理解你在问什么,但听起来你需要为这些数字创建单独的列表,这是否符合你的需要?

import numpy as np
import pandas as pd
globalVar = []

def _foo_append_(x_i,index):               

    if index > len(globalVar):
        globalVar.append([])

    globalVar[index-1].append(x_i)
    
    return globalVar[index-1]


for i in range(0,10):
    rv_1 = np.round(np.random.normal(10,5),decimals=2)
    rv_2 = np.round(np.random.normal(22,3),decimals=2)

    keep_1 = _foo_append_(x_i=rv_1,index=1)
    keep_2 = _foo_append_(x_i=rv_2,index=2)

您只需要稍后找到一些创建新索引的方法,可能只是使用类似的东西

newIndex = len(globalVar) + 1

或者其他的东西

import numpy as np
import pandas as pd

class Foo(object):

    def __init__(self):
        self.x_arr = list()

    def _foo_append_(self,x_i,count):
        self.x_arr.append(x_i)
        return self.x_arr



for i in range(0,10):
    rv_1 = np.round(np.random.normal(10,5),decimals=2)
    rv_2 = np.round(np.random.normal(22,3),decimals=2)

    if i==0:
        Foo1 = Foo()
        Foo2 = Foo()

    keep_1 = Foo1._foo_append_(x_i=rv_1,count=i)
    keep_2 = Foo2._foo_append_(x_i=rv_2,count=i)

仍然不喜欢使用if==0:强制初始化进程,我想找到一种方法来避免该调用。 但是这段代码正在运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM