從空間角度研究函數python
全局名稱空間: py文件運行時開闢的,存放的是執行的py文件(除去函數內部)的全部的變量與值(地址)的對應關係,整個py文件結束以後,纔會消失。函數
臨時(局部)名稱空間: 函數執行時,在內存中臨時開闢的一個空間,存放的函數中的變量與值的對應關係,隨着函數的結束而消失。code
內置名稱空間:input,print,內置函數等。內存
取值順序加載順序作用域
加載順序:上面這三個空間,誰先加載到內存。input
內置名稱空間 ----》 全局名稱空間 ----》 (函數執行時)臨時名稱空間io
取值順序:(就近原則)class
做用域變量
全局做用域:全局名稱空間,內置名稱空間。文件
局部做用域:局部名稱空間。
# count = 0 # # def func(): # count += 1 # func() #報錯 # UnboundLocalError: local variable 'count' referenced before assignment # 解釋器認爲:若是你在局部做用域對一個變量進行修改了, # 你在局部做用域已經定義好這個變量了。
能夠在局部做用域聲明一個全局變量。
# 這是剪切 # def func(): # 在全局定義一個變量name # global name # name = 1 # # print(globals()) # # print(locals()) # name += 1 # print(globals()) # # # func() # # print(name) # print(globals())
能夠修改全局變量。
# count = 0 # # def func(): # global count # count += 1 # # print(count) # func() # print(count)
# 這是複製 # def func(): # count = 0 # def inner(): # nonlocal count # count += 1 # print(count) # print(locals()) # inner() # print(locals()) # func() # UnboundLocalError: local variable 'count' referenced before assignment # 解釋器認爲:若是你在局部做用域對一個變量進行修改了, # 你在局部做用域已經定義好這個變量了。