Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
我在程序主函数中定义并使用一个二维numpy数组。然后在main中调用的函数尝试修改numpy数组而没有成功。数组在第二个函数中声明为全局数组,但仍然出现以下错误:
NameError:全局名称'name_of_the_array'未定义。
我认为您可以在不调用全局函数的情况下从main读取变量,但是如果您在函数内对其进行了修改,则必须在函数中全局声明它。那是我以为我在这里所做的,但似乎不起作用。只是声明使用numpy,所以也许这是numpy数组特有的?赞赏任何想法。
拉里
… 做这个:
但是,有一个更好的解决方案:只需将数组作为参数传递,而不要使用全局变量:
如果您避免这种情况是因为您来自C ++之类的语言,并且担心这样做会浪费大量时间和内存来复制整个数组,那么Python就不会那样工作。 (在C ++术语中,所有变量都像在使用引用参数一样传递…尽管该术语在Python中可能会引起误解。)
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
我在程序主函数中定义并使用一个二维numpy数组。然后在main中调用的函数尝试修改numpy数组而没有成功。数组在第二个函数中声明为全局数组,但仍然出现以下错误:
NameError:全局名称'name_of_the_array'未定义。
我认为您可以在不调用全局函数的情况下从main读取变量,但是如果您在函数内对其进行了修改,则必须在函数中全局声明它。那是我以为我在这里所做的,但似乎不起作用。只是声明使用numpy,所以也许这是numpy数组特有的?赞赏任何想法。
拉里
最佳答案
我在程序主函数中定义并使用一个二维numpy数组。然后在main中调用的函数尝试修改numpy数组而没有成功。数组在第二个函数中声明为全局数组,但仍然出现以下错误:
您必须在主函数中将其声明为global
。否则,您只是在创建局部变量,而不是全局变量。无论是否使用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中可能会引起误解。)