顧名思義,就是函數內還有函數
#嵌套函數 def func1(): print('func1') def func2(): print('func2') func1()
結果:
func1
為什么函數func2沒有被執行?
任意一個函數定義完成之后,如果沒有人通過名字調用它,就永遠不會執行
那如何調用func2?
def func1(): print('func1') def func2(): print('func2') func2() func1()
結果:
func1
func2
回顧全局變量和局部變量:
age = 18 #曾祖父 def func1(): #爺爺 age = 20 print(age) def func2(): #爸爸 age = 25 print(age) def func3(): #兒子 print(age) func3() func2() func1()
結果:
20 25 25
函數引用變量的時候是從該函數內部一層一層的向外找
還有一點值得注意的是,要遵循代碼的執行順序,想要被調用的變量不能在被執行函數的下面
age = 18 #正確: def func1(): # age = 20 放在上面 def func2(): print(age) age = 20 #放在下面,其實都是放在func2的上面 func2() func1() #錯誤: def func1(): def func2(): print(age) func2() age = 20 #不能放在引用該變量的函數下 func1()
結果:
#正確: 20 #錯誤: NameError: free variable 'age' referenced before assignment in enclosing scope