內部函數閉包
在函數內部定義另外一個函數,也就是函數的嵌套ide
在外部函數的做用域內,外部函數能夠隨意調用內部函數函數
因爲內部函數的整個定義過程都在外部函數中,因此出了外部函數就沒法再被調用了spa
def outside(): print('外部函數被調用')
def inside(): print('內部函數被調用') inside() >>>outside() 外部函數被調用 內部函數被調用 >>>inside() NameError: name 'inside' is not defined
閉包code
若是在一個內部函數裏引用了外部函數的變量,此時這個內部函數就被稱爲閉包blog
若是不加關鍵字nonlocal來聲明,就會報錯,閉包僅發生在嵌套函數中作用域
def outside(): var=3 def inside(): print(var) var=5 print(var) inside() >>>outside() UnboundLocalError: local variable 'var' referenced before assignment
修改: def outside(): var=3 def inside(): nonlocal var 使用關鍵字聲明 print(var) var=5 print(var) inside() >>>outside() 3 5