gpt4 book ai didi

python - 全局数组——不需要 "global"语句

转载 作者:太空宇宙 更新时间:2023-11-03 18:47:02 25 4
gpt4 key购买 nike

我写了这段代码:

sample_array = ones ([N, 3], dtype = float)
def get_training_set ():
r = rand (N, 2) * 2 - 1
sample_array[:,[0,1]] = r
return sample_array

我在外部声明了采样数组,以免一直分配它,只是为了修改它——最后一个坐标始终为1。

最初我希望我必须在函数中插入一个语句“global example_array”,因为我修改了它,因此评估器应该知道它是一个全局变量。

但是,令我惊讶的是,它在没有“全局”的情况下也能正常工作。 为什么它有效?在这种情况下评估的定义在哪里/是什么?

最佳答案

如果您要更改对对象的引用(例如通过赋值),则

global 是必需的。如果您只是改变对象(例如,像上面所做的那样进行切片分配),则没有必要。

确切的文档是 here .

The global statement is a declaration which holds for the entire current code block. It means that the listed identifiers are to be interpreted as globals.

因此,通过 global 语句,您可以告诉 python 该变量存在于全局上下文中。如果您分配给它,那么您就更改了全局上下文中的值。

如果不使用global语句,python会决定变量是局部变量还是非局部变量。 (事实上​​,python3.x添加了一个nonlocal关键字)。如果该变量首先出现在赋值的右侧,或者执行项赋值 (x[...] = ...) 或属性赋值 (x.不管怎样= ...)。如果变量是局部变量,则意味着它是在函数中创建的(或者是输入参数)。你可以直接重新分配一个本地标识符,没有问题。如果变量是非本地的,你可以改变它,但不能重新分配它,因为Python无法确定该变量是本地的还是非本地的。

关于python - 全局数组——不需要 "global"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19290255/

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