函数内部的globals()范围

python global-variables globals

75 观看

3回复

127 作者的声誉

这个问题已经在这里有了答案:

我对python中的globals()有疑问

我的示例代码

b=9
def a1():
 'kkk'

a1()
print globals()

我得到的输出b为全局

由于b是全局的,因此我希望可以在任何地方进行修改,因此我将代码修改为

b=9
def a1():
 'kkk'
 b=100
a1()
print globals()

我的globals()仍然将b表示为100。为什么函数内部的b被视为局部值,而我的globals()却将其表示为全局值?

注意:如果我在函数内添加关键字global b,它将转换为global。我的问题是,为什么在globals()将b声明为global时,函数内部没有修改b?

作者: syam 的来源 发布者: 2017 年 9 月 15 日

回应 3


1

880 作者的声誉

在函数内部,除非您使用关键字global,否则不会修改全局变量。而是会创建一个局部变量,并在超出范围时将其销毁

作者: Max 发布者: 2017 年 9 月 15 日

2

1920 作者的声誉

决定

请参阅Python文档以获取更多信息。复制文字以防URL不起作用

在Python中,仅在函数内部引用的变量是隐式全局的。如果在函数体内任何位置为变量分配了值,除非明确声明为全局变量,否则将假定该变量为局部变量。

尽管起初有些令人惊讶,但片刻的考虑可以解释这一点。一方面,要求全局分配变量可防止意外副作用。另一方面,如果所有全局引用都需要全局,那么您将一直使用全局。您必须将对内置函数或导入模块的组件的每个引用声明为全局引用。这种混乱将破坏全球宣言对确定副作用的有用性。

作者: anuragal 发布者: 2017 年 9 月 15 日

1

5711 作者的声誉

由于您的代码b是a1()中的局部变量,要使用全局变量,您应该首先对python说然后再使用它,如下所示:

b=9
def a1():
 'kkk'
 global b
 b=100

a1()
print globals()
作者: Serjik 发布者: 2017 年 9 月 15 日
32x32