为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2019-06-01 10:40:38
Python中“全局”关键字的使用通过阅读文档,我了解到Python有一个单独的函数命名空间,如果我想在这个函数中使用全局变量,我需要使用global.我正在使用Python2.7,我尝试了这个小测试>>> sub = ['0', '0', '0', '0']>>> def getJoin():...     return '.'.join(sub)...>>> getJoin()'0.0.0.0'即使没有global..我能够毫无问题地访问全局变量。我有遗漏什么吗?另外,以下是Python文档中的内容:不能将全局语句中列出的名称定义为形式参数或for循环控制目标、类定义、函数定义或导入语句。虽然形式参数和类定义对我来说是有意义的,但我无法理解对for循环控制目标和函数定义的限制。
查看完整描述

4 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

而您可以访问全局变量,而不需要使用global关键字,如果要修改它们,则必须使用global关键词。例如:

foo = 1def test():
    foo = 2 # new local foodef blub():
    global foo
    foo = 3 # changes the value of the global foo

在你的例子中,你只是访问列表sub.


查看完整回答
反对 回复 2019-06-01
?
当年话下

TA贡献1890条经验 获得超9个赞

这是访问名称和绑定在一个范围内。

如果您只是查找一个变量来读取它的值,那么您可以访问全局范围和本地范围。

但是,如果将名称不位于本地作用域中的变量赋值给变量,则绑定该名称进入该范围(如果该名称也作为全局名称存在,则将其隐藏)。

如果希望能够为全局名称分配,则需要告诉解析器使用全局名称,而不是绑定新的本地名称-这就是“全局”关键字的作用。

块中任何位置的绑定都会导致该块中任何位置的名称受到绑定,这可能会导致一些非常奇怪的结果(例如,在以前工作的代码中突然出现了UnideLocalError)。

>>> a = 1>>> def p():
    print(a) # accessing global scope, no binding going on>>> def q():
    a = 3 # binding a name in local scope - hiding global
    print(a)>>> def r():
    print(a) # fail - a is bound to local scope, but not assigned yet
    a = 4>>> p()1>>> q()3>>> r()Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    r()
  File "<pyshell#32>", line 2, in r    print(a) # fail - a is bound to local scope, but not assigned yetUnboundLocalError: 
  local variable 'a' referenced before assignment>>>


查看完整回答
反对 回复 2019-06-01
?
不负相思意

TA贡献1777条经验 获得超10个赞

另一个回答你的问题。在Python中需要了解的另一件重要的事情是,在每个范围内,名称要么是本地的,要么是全局的。

考虑这一点,例如:

value = 42def doit():
    print value
    value = 0doit()print value

你可能猜到value = 0语句将分配给局部变量,而不会影响在doit()功能。你可能会更惊讶地发现上面的代码不会运行。声明print value在函数内部生成一个UnboundLocalError.

原因是Python注意到,在函数的其他地方,您指定了名称value,而且value无处宣布global..这使得它成为一个局部变量。但是当您试图打印它时,本地名称还没有定义。Python在本例中不后退以全局变量的形式查找名称,就像其他语言所做的那样。实际上,如果定义了同名局部变量,则无法访问全局变量。任何地方在功能上。


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 663 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信