嵌套調用:在函數內部中調用函數python
嵌套定義:在函數內部中定義函數函數
存放變量名稱的空間,分爲內置名稱空間、全局名稱空間、局部名稱空間code
內置名稱空間:python中,提早定義的名字,存在內置名稱空間中。例如:關鍵字、內置方法對象
全局名稱空間:存放於文件級別的名字,就是全局名稱空間生命週期
if / while / for 內部定義的名字,在執行以後都存放於全局名稱空間內存
# if 的示例: var = 4 if var > 5: var = "var 大於5" else: var = "var 小於等於5" print(var) # 打印結果:var 小於等於5 # while 的示例: num = 0 while num <= 3: num += 1 print(num) # 打印結果:4 # for 的示例 for i in range(2): pass print(i) # 打印結果:1
局部名稱空間:函數內部定義的全部名字都是存放於當前函數的內置名稱空間作用域
若是想訪問一個變量值,必須先訪問對應的名稱空間,獲取到該變量的名稱以及名稱和值內存地址之間的關係。class
局部名稱:局部 → 全局 → 內置函數容器
全局名稱:全局 → 內置變量
內置再找不到就會報錯
函數內部使用的名字,在定義階段已經規定死了,與調用位置無關
局部做用域:局部能夠調用的名字存在於局部做用域。局部名稱空間屬於此處
global:將局部名稱空間的變量聲明成全局變量
注意:global須要在函數內部聲明,若在函數外聲明,則函數依然沒法操做
# 這種狀況不能修改x1的值 x1 = 1 def func1(): x1 = 2 func1() print(x1) # 打印結果:1 # 使用global 後,能夠修改x2的值 x2 = 1 def func2(): global x2 # 先聲明成全局變量 x2 = 2 func2() print(x2) # 打印結果:2 # global 若在函數外聲明,沒法操做變量 global x3 x3 = 1 def func2(): x3 = 2 func3() print(x3) # 打印結果:1
nonlocal:在局部名稱空間聲明局部變量。
nonlocal 聲明後的變量會從當前函數的外層函數開始一層層去查找該變量。如果一直到最外層函數都找不到,則會拋出異常。
def f3(): x = 4 def f1(): y = 2 def f2(): nonlocal x x = 3 f2() # 調用f2(),修改f1做用域中名字x的值 print(x) # 在f1做用域查看x。打印結果:3 f1() print(x) # 打印結果:3 f3()
def f3(): x = 4 def f1(): x = 2 def f2(): nonlocal x x = 3 f2() # 調用f2(),修改f1做用域中名字x的值 print(x) # 在f1做用域查看x。打印結果:3 f1() print(x) # 打印結果:4 f3()