我创建了以下示例程序来演示我正在尝试做的事情:
name = "d"
def namechange (name):
global name
name = "Henry"
return name
print name
产生的错误:
SyntaxError: name 'name' is local and global
我知道name变量是本地的和全局的,但我是新手,不知道如何解决这个问题。请帮忙
答案 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