我对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声明为全局?
答案 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()