需要在 python() 中保存来自同一个 function() 的全局变量

need to save a global variables coming from the same function() in python()

我制作了一个玩具函数,我需要保存赋予该函数的某些值...为了执行此操作,我通常将此存储变量 x 声明为全局变量..

但是如果我需要在同一个代码中多次调用这个函数,同一个全局变量x显然将是每次函数被调用的结果。

如何获得这个简单的任务?

下面是玩具示例。

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)

输出应该是两个包含 10 个元素的数组 keep1keep2,但我得到的是两个包含 20 个元素的数组..

如何实现? 谢谢

使用 global/nonlocal 变量很难使不同的列表保持一致,因为它们在同一范围内共享相同的名称。您应该分别初始化每个数组。

您的示例可以更简单(且正确)地写为:

import numpy as np


keep_1 = [np.round(np.random.normal(10,5),decimals=2) for _ in range(10)]
keep_2 = [np.round(np.random.normal(22,3),decimals=2) for _ in range(10)]

如果您的“真实”示例更复杂并且您不能使用列表理解,或者您实际上不能将不同的 keeps 声明为不同的命名变量,下面是一个使用您的 _foo_append_(减去不必要的全局 var 内容,它只是对 append 的简单调用)和跟踪 keep_n 列表的列表列表:

def _foo_append_(x, x_i):
    x.append(x_i)


params = [(10, 5), (22, 3)]
keeps = []
for p in params:
    keeps.append([])
    for _ in range(0, 10):
        _foo_append_(keeps[-1], np.round(np.random.normal(*p), decimals=2))