无法从其他模块追加全局NumPy数组

时间:2014-07-18 16:32:18

标签: python arrays numpy

我在修改依赖模块中的NumPy数组时遇到问题,该数组先前在parrent模块中定义。我已经检查过,它只修改函数 calc()中的localy 如何在函数内部修改其他模块中定义的NumPy数组?

main_module.py

import numpy as np
from pprint import pprint
test_array = np.array([1, 2, 3])
pprint(test_array)

process.py

from main_module import *
def calc():
    global test_array
    test_array = np.append(test_array, [4])
    pprint(test_array)
calc()
pprint(test_array)

1 个答案:

答案 0 :(得分:1)

在python中,globals是模块的全局,而不是整个程序。在面向对象语言中执行此类操作的标准方法是将相关数组附加到某个对象,例如:

main_module:

import numpy as np
from pprint import pprint

class GlobalArrayHolder(object):
    def __init__(self):
        self.test_array = np.array([1, 2, 3])

arrayholder = GlobalArrayHolder()
pprint(arrayholder.test_array)

过程:

import numpy as np
from pprint import pprint
from main_module import arrayholder

def calc(arrayholder):
    arrayholder.test_array = np.append(arrayholder.test_array, [4])
    pprint(arrayholder.test_array)

calc(arrayholder)
pprint(arrayholder.test_array)

如果您不想为此定义自己的类,可以使用像dict这样的简单内置类。例如:

main_module:

import numpy as np
from pprint import pprint

arrayholder = {'test_array':np.array([1, 2, 3])}
pprint(arrayholder['test_array'])

过程:

import numpy as np
from pprint import pprint
from main_module import arrayholder

def calc(arrayholder):
    arrayholder['test_array'] = np.append(arrayholder['test_array'], [4])
    pprint(arrayholder['test_array'])

calc(arrayholder)
pprint(arrayholder['test_array'])