2017-06-08 38 views
0

我已經創建了下面的示例程序來證明什麼,我試圖做一個函數內的全局變量內容:如何更改

name = "d" 

def namechange (name): 

    global name 
    name = "Henry" 
    return name 

print name 

所產生的錯誤:

SyntaxError: name 'name' is local and global 

我明白,名稱變量是本地和全球的,但我是新來的,不知道如何解決這個問題。請幫助

+3

刪除從''的的namechange'參數name'。這是Python引用的本地'name'變量。 –

+2

你的函數接受'name'參數,使它成爲本地的。 –

回答

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

Python將函數參數視爲局部變量。如此以來,你的函數接受一個參數,也叫name,巨蟒現在認爲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 = "d" 

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

new_name = namechange(name) 
print new_name