如何更改函数中的全局变量内容

时间:2017-06-08 22:49:48

标签: python variables

我创建了以下示例程序来演示我正在尝试做的事情:

name = "d"

def namechange (name):

    global name
    name = "Henry"
    return name

print name

产生的错误:

SyntaxError: name 'name' is local and global

我知道name变量是本地的和全局的,但我是新手,不知道如何解决这个问题。请帮忙

2 个答案:

答案 0 :(得分:1)

def namechange (name):

这引入了本地变量name

global name

然而,这也在同一范围内引入了全局变量name

因此name是本地和全局的语法错误。为了解决这个问题,您必须删除局部变量或全局变量。在你的情况下,你可以做到这两点。

您可以删除局部变量,只需使该函数修改全局变量,如下所示:

def namechange ():
    global name
    name = "Henry"

在这种情况下,您实际上不需要返回任何内容,因为这已经修改了全局变量。

或者您可以删除全局变量,并使此函数只返回新值:

def namechange (name):
    name = "Henry"
    return name

在这种情况下,调用者有责任从外部范围更新变量:

name = "d"
new_name = namechange(name)
print(new_name) # Henry

答案 1 :(得分:1)

Python将函数参数视为局部变量。因此,由于您的函数正在接受名为name的参数,因此Python现在将name视为局部变量:

>>> global_variable = 0
>>> def foo(global_variable): # your creating a local variable here.
    global global_variable

SyntaxError: name 'global_variable' is parameter and global
>>> 

修复方法是从函数参数中删除名称。这样,Python会将name视为全局变量:

name = "d"   

def namechange (): # remove name
    global name
    name = "Henry"

print name

但是,尽可能避免使用全局变量。在这种情况下,将name作为参数传递给函数是一个更好的解决方案,让调用者处理更新变量:

name = "d"   

def namechange (name):
    name = "Henry"
    return name

new_name = namechange(name)
print new_name