你也許遇到過, python中一些函數在最尾部有一個return關鍵字。你知道它是干嘛嗎?它和其他語言的return類似。我們來檢查下這個小函數:
def add(value1, value2):
return value1 + value2
result = add(3, 5)
print(result)
# Output: 8
上面這個函數將兩個值作為輸入,然後輸出它們相加之和。我們也可以這樣做:
def add(value1,value2):
global result
result = value1 + value2
add(3,5)
print(result)
# Output: 8
那首先我們來談談第一段也就是包含return關鍵字的代碼。那個函數把值賦給了調用它的變量(也就是例子中的result變量)。
大多數境況下,你並不需要使用global關鍵字。然而我們也來檢查下另外一段也就是包含global關鍵字的代碼。 那個函數生成了一個global(全局)變量result。
global在這的意思是什麼?global變量意味著我們可以在函數以外的區域都能訪問這個變量。讓我們通過一個例子來證明它:
首先,是沒有使用global變量
def add(value1, value2):
result = value1 + value2
add(2, 4)
print(result)
Oh 糟了,我們遇到異常了。為什麼會這樣?python解釋器報錯說沒有一個叫result的變量。
這是因為result變量只能在創建它的函數內部才允許訪問,除非它是全局的(global)。
Traceback (most recent call last):
File "", line 1, in result
NameError: name 'result' is not defined
現在我們運行相同的代碼,不過是在將result變量設為global之後
def add(value1, value2):
global result
result = value1 + value2
add(2, 4)
print(result)
#6
如我們所願,在第二次運行時沒有異常了。在實際的編程時,你應該試著避開global關
鍵字,它只會讓生活變得艱難,因為它引入了多余的變量到全局作用域了。
那如果你想從一個函數裡返回兩個變量而不是一個呢?
新手們有若干種方法。最著名的方法,是使用global關鍵字。讓我們看下這個沒用的例子:
def profile():
global name
global age
name = "Danny"
age = 30
profile()
print(name)
# Output: Danny
print(age)
# Output: 30
注意: 不要試著使用上述方法。重要的事情說三遍,不要試著使用上述方法!
有些人試著在函數結束時,返回一個包含多個值的tuple(元組),list(列表)或
者dict(字典),來解決這個問題。這是一種可行的方式,而且使用起來像一個黑魔法:
def profile():
name = "Danny"
age = 30
return (name, age)
profile_data = profile()
print(profile_data[0])
# Output: Danny
print(profile_data[1])
# Output: 30
或者按照更常見的慣例:
def profile():
name = "Danny"
age = 30
return name, age
這是一種比列表和字典更好的方式。不要使用global關鍵字,除非你知道你正在做什麼。global也許在某些場景下是一個更好的選擇(但其中大多數情況都不是)。
A font created by the develope
Catalog One . Introduction to