日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python 高级特性 (1)- 闭包

發(fā)布時(shí)間:2023/11/28 生活经验 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 高级特性 (1)- 闭包 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 閉包的概念

在一些語言中,在函數(shù)中可以(嵌套)定義另一個(gè)函數(shù)時(shí),如果內(nèi)部的函數(shù)引用了外部的函數(shù)的變量,則可能產(chǎn)生閉包。閉包可以用來在一個(gè)函數(shù)與一組“私有”變量之間創(chuàng)建關(guān)聯(lián)關(guān)系。在給定函數(shù)被多次調(diào)用的過程中,這些私有變量能夠保持其持久性。—— 維基百科

用比較通俗的話說就是,內(nèi)部函數(shù)使用了外部函數(shù)的變量。或者說內(nèi)部函數(shù)的局部作用域中可以訪問外部函數(shù)局部作用域中變量的行為,我們稱為: 閉包。舉個(gè)例子:

In [1]: def out(msg):...:     def inner():...:         print msg	# 內(nèi)部函數(shù)使用了外部函數(shù)的變量 msg...:     return inner	# 返回的是內(nèi)部函數(shù)...: In [2]: fun = out("hello")In [3]: fun()
hello

2. 閉包的理解

閉包存在的意義就是它使用了外部變量,如果它不使用外部變量,它和普通的函數(shù)就沒有任何區(qū)別。同一個(gè)的函數(shù)使用不同的外部變量,就實(shí)現(xiàn)了不同的功能。舉個(gè)例子:

In [5]: def tag(tag_name):...:     def add_content(content):...:         return "<{0}>{1}</{0}>".format(tag_name, content)...:     return add_content...: In [6]: content = "Hello world"In [7]: fun = tag('a')In [8]: fun(content)
Out[8]: '<a>Hello world</a>'In [9]: fun = tag('b')In [10]: fun(content)
Out[10]: '<b>Hello world</b>'

所有函數(shù)都有一個(gè) __closure__屬性,如果這個(gè)函數(shù)是一個(gè)閉包的話,那么它返回的是一個(gè)由 cell 對象 組成的元組對象。cell 對象的cell_contents 屬性就是閉包中的自由變量。

In [16]: add_tag.__closure__
Out[16]: (<cell at 0x0000000003AFA5B8: str object at 0x0000000001CEEB48>,)In [17]: add_tag.__closure__[0].cell_contents
Out[17]: 'b'

參考鏈接

https://mp.weixin.qq.com/s?__biz=MzAwOTQ4MzY1Nw==&mid=2247485660&idx=1&sn=584d9a6035add6216ede7d05ed607774&chksm=9b5fac3aac28252cfee323bd52257b3465677eea1a9459726824afae9b1c9593cf287d895cff&mpshare=1&scene=23&srcid=0512s6cVah1breDwmj5NXfOa#rd

https://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=2652566413&idx=1&sn=0a45da48e1b926cf1019fb975b03596f&chksm=8464dbc7b31352d145e4b9c626527ab3516d13fbc52a89dbc51960967104e3c5554506f0350f&mpshare=1&scene=23&srcid=0406u1OlC8bcCj8qMVeQ9PiQ#rd

https://mp.weixin.qq.com/s?__biz=MzA5ODUzOTA0OQ==&mid=2651688002&idx=1&sn=29cb99b9b907daf4e9bf7f3b4b0efce7#rd

https://segmentfault.com/a/1190000007510013

https://segmentfault.com/a/1190000007321972

https://www.jianshu.com/p/bee66bab4eeb

https://mp.weixin.qq.com/s?__biz=MjM5MzgyODQxMQ==&mid=2650366929&idx=1&sn=5bba7ccef04dc39f81b628429ddd08db&chksm=be9cd88589eb5193cce49a1ec3365325176fd884ac3e1cd9363786a40967b180cf54b0046922&mpshare=1&scene=23&srcid=06087b72irR1gWMhsDHToVLQ#rd

總結(jié)

以上是生活随笔為你收集整理的Python 高级特性 (1)- 闭包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。