python基礎——函數對象和閉包

來源:互聯網
上載者:User

標籤: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基礎——函數對象和閉包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.