#命名空間 有三種
#內置命名空間 —— python解釋器
# 就是python解釋器一啓動就能夠使用的名字存儲在內置命名空間中
# 內置的名字在啓動解釋器的時候被加載進內存裏
#全局命名空間 —— 咱們寫的代碼但不是函數中的代碼
# 是在程序從上到下被執行的過程當中依次加載進內存的
# 放置了咱們設置的全部變量名和函數名
#局部命名空間 —— 函數
# 就是函數內部定義的名字
# 當調用函數的時候 纔會產生這個名稱空間 隨着函數執行的結束 這個命名空間就又消失了
#在局部:能夠使用全局、內置命名空間中的名字
#在全局:能夠使用內置命名空間中的名字,可是不能用局部中使用
#在內置:不能使用局部和全局的名字的
錯誤示例
# def func(): # a = 1 # func() # print(a)
注:上例中變量‘a’定義在函數func的命名空間中,當在函數外打印時,只尋找全局和內置命名空間,故找不到變量‘a’,程序出錯,錯誤緣由是變量‘a’未被定義python
函數名與內置空間中的名字相同的狀況函數
# def max(l): # print('in max func') # print(max([1,2,3]))
# 在正常狀況下,直接使用內置的名字
# 當咱們在全局定義了和內置名字空間中同名的名字時,會使用全局的名字
# 當我本身有的時候 我就不找個人上級要了
# 若是本身沒有 就找上一級要 上一級沒有再找上一級 若是內置的名字空間都沒有 就報錯
# 多個函數應該擁有多個獨立的局部名字空間,不互相共享
# 做用域兩種
# 全局做用域 —— 做用在全局 —— 內置和全局名字空間中的名字都屬於全局做用域
——globals() 可查看全局做用域的地址
# 局部做用域 —— 做用在局部 —— 函數(局部名字空間中的名字屬於局部做用域)
——locals() 可查看當前做用域的地址
#global 聲明
# 對於不可變數據類型 在局部可查看全局做用域中的變量
# 可是不能直接修改
# 若是想要修改,須要在程序的一開始添加global聲明
# 若是在一個局部(函數)內聲明瞭一個global變量,那麼這個變量在局部的全部操做將對全局的變量有效
# a = 1 # def func(): # global a # a += 2 # func() # print(a)