函数内的globals()作用域

时间:2017-09-15 05:58:09

标签: python global-variables globals

我对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。 我的问题是为什么b在函数内没有被修改而globals()将b声明为全局?

3 个答案:

答案 0 :(得分:2)

有关详细信息,请参阅Python docs。复制案例URL中的文本不起作用

  

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

     

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

答案 1 :(得分:1)

在函数内部,除非使用关键字global,否则它不是被修改的全局变量。相反,一个局部变量被创建并在它超出范围时被销毁

答案 2 :(得分:1)

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

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

a1()
print globals()