我在程序主函数中定义并使用了一个二维 numpy 数组。然后在 main 中调用的函数尝试修改 numpy 数组但没有成功。该数组在第二个函数中被声明为全局,但我仍然收到以下错误:
您必须将其声明为global
在main函数中。否则,您只是在创建一个局部变量,而不是一个全局变量。而且你不能访问另一个函数的局部变量,不管有没有global
; 您只能访问全局变量。
我认为您可以在函数中从 main 读取变量而无需将其称为全局变量,但是如果您在函数中对其进行了修改,则必须在函数中将其声明为全局变量。
足够接近真实......但创建它算作修改它。
所以,而不是这个:
def sub():
global name_of_array
return name_of_array[0, 0]
def main():
name_of_array = np.zeros((2, 2))
sub()
… 做这个:
def sub():
global name_of_array
return name_of_array[0, 0]
def main():
global name_of_array
name_of_array = np.zeros((2, 2))
sub()
但是,有一个更好的解决方案:只需将数组作为参数传递,而不是使用全局:
def sub(name_of_array):
return name_of_array[0, 0]
def main():
name_of_array = np.zeros((2, 2))
sub(name_of_array)
如果你避免这样做是因为你来自像 C++ 这样的语言,并且担心这会浪费大量时间和内存来复制整个数组,那么 Python 就不会那样工作。(在 C++ 术语中,所有变量都像使用引用参数一样传递……尽管该术语在 Python 中可能会产生误导。)