在講本地變數和全域變數之前,我們要先了解到LEGB原則。
參考至:Tibame Python教程
題外話:今天幫人代班賺了點外快,送完公文處理完事情,就能看書吹冷氣,蒸蚌。
LEGB什麼意思呢?
Local
Enclosing functions
Global(模組)
Built-in
當我們在搜尋變數名稱的時候,會先從Local端先行尋找,再搜尋functions中是否有對應宣告,以此類推到Built-in(Python內建函數中)。
讓我們看下範例:
x = 5
f = lambda x:x**2 # x is local
print(f(3))
現在我們有兩個x變數,但是兩個變數所作用的範圍不同,改變外頭的x數值,並不會改變我們f匿名函數裡面的x數值,所以說即使我們x再怎麼變化,f(3)都會是9。
f = lambda x:x**2 # x is local
print(f(3))
現在我們有兩個x變數,但是兩個變數所作用的範圍不同,改變外頭的x數值,並不會改變我們f匿名函數裡面的x數值,所以說即使我們x再怎麼變化,f(3)都會是9。
name = "This is a global name"
def greeting():
# Enclosing function
name = "Peter" # Enclosing function locals
def hello():
print("Hello"+name)
hello()
greeting()
和剛剛一樣外面的name不會影響到greeting()裡面的name,故hello()出來的name是Peter而不是This is a global name。
def greeting():
# Enclosing function
name = "Peter" # Enclosing function locals
def hello():
print("Hello"+name)
hello()
greeting()
和剛剛一樣外面的name不會影響到greeting()裡面的name,故hello()出來的name是Peter而不是This is a global name。
print(name) # Global
輸出的很自然而然就是This is a global name。
print(len) # Built-in function
由於我們這個程式完完全全沒有提到len這個變數,所以Python就會跑去內部找找看,於是找到了。
<built-in function len>
參考至:Tibame Python教程
題外話:今天幫人代班賺了點外快,送完公文處理完事情,就能看書吹冷氣,蒸蚌。