1.內部函數,只能在外部函數內調用,否則出錯
>>> def fun1(): #fun2()的外部函數
? ? ? ? ? ? ?print("fun1()被調用...")
? ? ? ? ? ? ? ? ? ? ? def fun2(): #fun1()的內部函數
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?print("fun2()被調用..")
? ? ? ? ? ? ?fun2()
>>> fun1()
fun1()被調用...
fun2()被調用..
2.閉包
對象是附加方法的數據,閉包是附加數據的函數。(Objects are data with methods attached, closures are functions with data attached.)
要形成閉包,首先得有一個嵌套的函數,即函數中定義了另一個函數,閉包則是一個集合,它包括了外部函數的局部變量,這些局部變量在外部函數返回后也繼續存在,并能被內部函數引用。
>>> def FunX(x):
? ? ? ? ? ? ? def FunY(y):
? ? ? ? ? ? ? ? ? ? ?return x * y
? ? ? ? ? ? ? return FunY
>>> g = FunX(8)
>>> g(5)
40
>>>type(g) #g的類型
<class,'function'>
>>> FunX(8)(5)
40