gpt4 book ai didi

python - main 中定义的 Numpy 数组在函数中无法识别

转载 作者:行者123 更新时间:2023-12-01 05:36:41 27 4
gpt4 key购买 nike

我在程序主函数中定义并使用了一个二维numpy数组。然后,在 main 中调用的函数尝试修改 numpy 数组,但没有成功。该数组在第二个函数中被声明为全局数组,但我仍然收到以下错误:

NameError:未定义全局名称“name_of_the_array”。

我认为您可以从函数中的 main 读取变量而不将其称为全局变量,但是如果您在函数内修改它,则必须在函数中将其声明为全局变量。这就是我以为我在这里所做的,但它似乎不起作用。只是声明使用 numpy 所以也许它是 numpy 数组独有的东西?感谢任何想法。

拉里

最佳答案

I define and use a 2 dimensional numpy array in the program main function. A function called within main then tries to modify the numpy array without success. The array is declared as global in the second function but I still get the following error:

您必须在 main 函数中将其声明为global。否则,您只是创建一个局部变量,而不是全局变量。并且无论有或没有 global,您都无法访问另一个函数的局部变量;您只能访问全局变量。

I thought that you could read a variable from main within a function without calling it global but that if you modified it within the function you had to declare it global in the function.

足够接近真实......但创建它也算作修改它。

<小时/>

所以,而不是这个:

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 中可能会产生误导。)

关于python - main 中定义的 Numpy 数组在函数中无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com