理解閉包之前,先要理解函式引用。在python裡面,函式名可以作為函式引用指向函式體。
def test_func():
print('say hello')
test_func() #呼叫函式
print(test_func) #輸出函式test_func的引用
b= test_func #將函式引用複製給變數b
b()#等價於呼叫test_func()
閉包:內部函式引用外部函式的變數,則內部函式稱為閉包,所引用的變數稱為自由變數。
當呼叫func=outter('mali')的時候,只有兩條寫在inner函式外面的輸出語句被執行,inner函式並沒有執行,而是作為乙個函式引用返回給了變數func
到呼叫func(12)的時候,12傳給了inner函式的引數age,並執行了inner函式。
def outter(name):
print ('my name is:' + str(name))
def inner(age):
print("----inner print----")
print('name:' + str(name))
print('age:' + str(age))
print('-----end of inner print----')
print('---end of outter print---')
return inner
func = outter('mali')
#輸出:
#my name is:mali
#---end of outter print---
func(12)
#輸出#----inner print----
# name:mali
# age:12
# -----end of inner print----
關鍵字nolocal可以用在閉包裡面,修改外部函式的變數。nolocal的作用和global關鍵字類似,外部函式的變數如果需要修改需要在內部函式裡面宣告為nolocal。如下面**,如果去掉nolocal outter_num,則下面 outter_num+=100會報錯:unboundlocalerror: local variable 'outter_num' referenced before assignment。
def outter(num):
outter_num=num
def inner():
nonlocal outter_num
outter_num+=100
print(outter_num)
return inner
inner=outter(100)
inner() #輸出200
NHibernate基礎拾遺
configuration 用於配置並啟動nhibernate,通過此例項來獲取物件關係對映檔案中的元資料 可以通過此例項動態配置nhibernate的屬性 此例項可以建立sessionfactory sessionfactory 乙個這個型別的例項對應乙個資料儲存源 可以建立session的例項 ...
NHibernate基礎拾遺
configuration 用於配置並啟動nhibernate,通過此例項來獲取物件關係對映檔案中的元資料 可以通過此例項動態配置nhibernate的屬性 此例項可以建立sessionfactory sessionfactory 乙個這個型別的例項對應乙個資料儲存源 可以建立session的例項 ...
javascript基礎拾遺 二
1.物件定義 定義屬性 var language console.log language.name console.log language.score 定義方法 var language console.log language.name console.log language.score c...