python中函数外的全局和intizilation有什么区别

时间:2016-01-13 14:48:17

标签: python keyword

global name
name = "Robert"
def f():
    print name
f()
print name

之间的区别
name = "Robert"
def f():
    print name
f()
print name

如何区分这两个片段

3 个答案:

答案 0 :(得分:2)

在函数或类之外声明的变量是全局的(在模块内)。

global可以在函数/类中使用,以便能够在全局范围内修改该变量。

答案 1 :(得分:1)

在这种情况下没有理由使用global,并且两段代码之间没有区别。

使用全局的原因是你在一个函数中重新赋值变量;但即使这样,你也需要在中使用全局,而不是在外面。

答案 2 :(得分:1)

global未将变量声明为全局变量,它会在函数查找分配给变量的变量名称时更改。
如果没有global,则在首次为其赋值时会创建局部变量 使用global,全局查找名称。如果分配给它时不存在,则全局创建 (如果你输入拼写错误并意外地创建一个新的全局变量,这可能会非常混乱。)

它对全球范围没有影响,因为那里的一切都是全球性的 换句话说,你的两段代码是等价的。

以下是它的作用示例:

name = "foo"

def f():
    name = "bar"
    print "In f:", name

def g():
    global name
    name = "baz"
    print "In g:", name

def h():
    global mame
    mame = "foobar"
    print "In h:", mame

print "Globally:", name
f()
print "Globally:", name
g()
print "Globally:", name
h()
print "Globally", name
print "Globally", mame

输出:

Globally: foo
In f: bar
Globally: foo
In g: baz
Globally: baz
In h: foobar
Globally: baz
Globally: foobar