python基礎拾遺005 閉包

2021-08-25 16:50:35 字數 1423 閱讀 1533

理解閉包之前,先要理解函式引用。在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...