在函数中定义全局

Ner*_*tix 2 python variables global function

是否可以在函数内定义全局变量?像这样:

def posities():
    global blauw
    blauw = {"bl1":[0], "bl2":[0],"bl3":[0],"bl4":[0]}
    global geel
    geel = {"ge1":[0], "ge2":[0],"ge3":[0],"ge4":[0]}
    global groen
    groen = {"gr1":[0], "gr2":[0],"gr3":[0],"gr4":[0]}
    global rood
    rood = {"ro1":[0], "ro2":[0],"ro3":[0],"ro4":[0]}
    global ingenomenPos
    ingenomenPos = []
Run Code Online (Sandbox Code Playgroud)

或者我必须首先声明函数之外的变量?因为当我在函数内部定义它们并尝试从另一个函数访问它们时,它无法识别它.所以我想声明全局变量而不先在函数外声明它们.

所以我尝试用这种方法访问那些全局变量:

def bezet():
    print (str(ingenomenPos))
Run Code Online (Sandbox Code Playgroud)

这导致错误:

NameError: name 'ingenomenPos' is not defined
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

使用global报表中只列出的功能,无处(这在其他地方也没有影响).是的,它会起作用,不需要先创建全局外部.

这很容易在口译员中测试:

>>> foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> def bar():
...     global foo
...     foo = 'baz'
...
>>> bar()
>>> foo
'baz'
Run Code Online (Sandbox Code Playgroud)

global语句告诉Python编译器,分配名称应该设置全局变量而不是局部变量.如果没有该语句,函数中的所有变量一旦用于绑定就会变为本地变量.

请注意,您必须调用该函数; 只是global函数中存在的语句不足以绑定名称.Python没有'声明',名称只存在于绑定操作中.请参阅命名和绑定.

如果仍然看到异常,那么分配从未执行过.您没有调用该函数,或者name = value从未到达该语句(因为该函数在该行之前返回或引发了异常).