標籤:http 參數 方法 修改 作用 hive strong 返回 lis
關於函數對象和閉包
閉包(closure)是函數式編程的重要的文法結構。不同的語言實現閉包的方式不同。Python以函數對象為基礎,為閉包這一文法結構提供支援的 (我們在特殊方法與多範式中,已經多次看到Python使用對象來實現一些特殊的文法)。Python一切皆對象,函數這一文法結構也是一個對象。在函數對象中,我們像使用一個普通對象一樣使用函數對象,比如更改函數對象的名字,或者將函數對象作為參數進行傳遞。
一、函數對象:
1、函數可以當參數傳遞
樣本:
#把函數當成參數傳遞def foo():#定義foo函數 print(‘foo‘)def bar(foo): print(foo)#列印foo的記憶體位址 foo()#調用foo函數bar(foo)
執行結果是:
<function foo at 0x00000000022EB8C8>foo
2、函數可以被賦值
樣本:
def foo():#定義foo函數 print(‘foo‘)print(foo)#輸出foo的記憶體位址f=fooprint(f)f()#即foo()執行foo函數
執行結果是:
<function foo at 0x00000000003F3E18><function foo at 0x00000000003F3E18>foo
3、把函數當成傳回值
樣本:
# 把函數當成傳回值def foo():#定義foo函數 print(‘foo‘)def bar(foo): print(foo) return foo#將foo作為傳回值f=bar(foo)print(f)f()
執行結果是:
<function foo at 0x0000000001FBB8C8><function foo at 0x0000000001FBB8C8>foo
4、把函數當做容器類型變數(將函數當做容器類型變數,可隨時在主軸線上調用)
樣本:
def tell_msg(): msg=‘‘‘ search:查詢 add:添加 delete:刪除 change:修改 create:建立 ‘‘‘ print(msg)
二、閉包:(定義到內部的函數包括對外部範圍的引用,不包括對全域範圍的引用)
判斷是否為閉包:
print(f.__closure__),傳回值為none的話,則表示不是閉包
print(f.__closure__[0].cell_contents)按照索引的方式返回閉包的值
print(f.__closure__[1].cell_contents)按照索引的方式返回閉包的值
python基礎——函數對象和閉包