1.內(nèi)部函數(shù),只能在外部函數(shù)內(nèi)調(diào)用,否則出錯(cuò)
>>> def fun1(): #fun2()的外部函數(shù)
? ? ? ? ? ? ?print("fun1()被調(diào)用...")
? ? ? ? ? ? ? ? ? ? ? def fun2(): #fun1()的內(nèi)部函數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?print("fun2()被調(diào)用..")
? ? ? ? ? ? ?fun2()
>>> fun1()
fun1()被調(diào)用...
fun2()被調(diào)用..
2.閉包
對(duì)象是附加方法的數(shù)據(jù)供置,閉包是附加數(shù)據(jù)的函數(shù)征绸。(Objects are data with methods attached, closures are functions with data attached.)
要形成閉包,首先得有一個(gè)嵌套的函數(shù)庶艾,即函數(shù)中定義了另一個(gè)函數(shù)沿彭,閉包則是一個(gè)集合幻枉,它包括了外部函數(shù)的局部變量势誊,這些局部變量在外部函數(shù)返回后也繼續(xù)存在撩笆,并能被內(nèi)部函數(shù)引用苗傅。
>>> 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