顧名思義,就是函數內還有函數
#嵌套函數
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
