需要在 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 个元素的数组 keep1
和 keep2
,但我得到的是两个包含 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))
我制作了一个玩具函数,我需要保存赋予该函数的某些值...为了执行此操作,我通常将此存储变量 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 个元素的数组 keep1
和 keep2
,但我得到的是两个包含 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))