2017-09-15 193 views
0

我有一个关于全局()Python中的问题全局()函数内部范围

我的示例代码

b=9 
def a1(): 
'kkk' 

a1() 
print globals() 

我输出B作为全球

由于B是全球性的,我我期待我可以在任何地方修改它 所以我修改我的代码到

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

仍然我的全局变量()表示b为100.为什么函数内的b被当作本地值,而我的全局变量()表示它的全局变量?

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

+0

你的问题不直接关于该错误,但它实际上是相同的:为什么变量分配给函数local? –

回答

2

请参阅Python docs以获取更多信息。复制案例URL中的文本不起作用

在Python中,仅在函数中引用的变量隐式地为全局变量。如果一个变量在函数体内的任何位置被赋值,它被认为是一个局部变量,除非明确声明为全局变量。

虽然起初有点出人意料,但一时的考虑解释了这一点。一方面,要求分配变量的全局值可以防止出现意想不到的副作用。另一方面,如果所有全局引用都需要全局,则您将始终使用全局。您必须声明为全局的每个对内置函数的引用或对导入模块的一个组件。这种混乱将破坏全球声明确定副作用的有效性。

1

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

1

至于你的代码b是A1()的局部变量,使用全局变量,你应该先说给蟒蛇,然后用它,如下所示:

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

a1() 
print globals() 
+0

我的问题是为什么python报告b为全局的,即使我没有在函数内部使用关键字'global'? – syam

+0

您定义了'b'全局,这意味着它不在任何函数或类中,使用global关键字不定义全局,它将标记以前全局定义的变量用于要使用的函数 – Serjik