1. 程式人生 > 實用技巧 >20210111-1 裝飾器之巢狀函式

20210111-1 裝飾器之巢狀函式

1-1
# 什麼是巢狀函式?
# 在函式體內在用 def 定義另外一個函式
def foo():
    print('in the foo')
    def bar():
        print('in the bar')
    
    bar()
foo()
--->
in the foo
in the bar
# bar() 是一個區域性變數,存在於過程或者函式中;函式即變數
# 區域性變數不能在外面呼叫,只能在內部呼叫
# 所以,如果要呼叫 bar(),應該寫在內部

1-1-1
# 以下情況是函式巢狀嗎?
# 如果 test2 存在,這種方式叫函式巢狀嗎?
# 這叫函式呼叫,不是巢狀
def test1(): test2() test1() # 裝飾器是由巢狀函式和高階函式組成 2-1 區域性作用域和全域性作用域的訪問順序 x=0 def grandpa(): # x=1 def dad(): x=2 def son(): x=3 print(x) son() dad() grandpa() # grandpa 函式中 套了兩個函式,如果想執行 son;一定要通過 dad 進行呼叫 # 所以寫 dad()呼叫的目的,是為了執行 son()
# 如果不寫 dad(),呼叫 grandpa() 時,會有什麼效果? # 遇到 def 相當於定義一個變數,如果沒有呼叫 dad(),後面相當於沒有變數,相當於什麼事情都沒有做 # 作用域一層一層,從內向外尋找