在Python中使用“全局”关键字

问题:

从阅读文档中我了解到,Python对于函数有一个单独的命名空间,如果我想在该函数中使用全局变量,我需要使用global
我使用Python 2.7,我尝试了这个小测试

>>> sub = ['0', '0', '0', '0']
>>> def getJoin():
...     return '.'.join(sub)
...
>>> getJoin()
'0.0.0.0'

即使没有global,似乎工作正常。我能够访问全局变量没有任何问题。
我错过了什么吗?另外,以下是Python文档:

全局语句中列出的名称不能被定义为形式参数,也不能定义在for循环控件目标,类定义,函数定义或导入语句中。

虽然正式的参数和类定义对我有意义,但我无法理解对循环控制目标和函数定义的限制。

回答:

关键字global仅用于在本地上下文中更改或创建全局变量,尽管创建全局变量很少被认为是一个很好的解决方案。

def bob():
    me = "locally defined"    # Defined only in local context
    print me

bob()
print me     # Asking for a global variable

以上将给你:

locally defined
Traceback (most recent call last):
  File "file.py", line 9, in <module>
    print me
NameError: name 'me' is not defined

而如果使用global语句,则该变量将在函数范围之外变为可用,有效地成为全局变量。

def bob():
    global me
    me = "locally defined"   # Defined locally but declared as global
    print me

bob()
print me     # Asking for a global variable

所以上面的代码会给你:

locally defined
locally defined

另外,由于python的性质,您还可以使用global在本地上下文中声明函数,类或其他对象。虽然我建议反对它,因为它会导致恶梦,如果出现问题或需要调试。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Use of “global” keyword in Python

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 1