我在修改依赖模块中的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)
答案 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'])