最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python閉包思想與用法淺析

 更新時(shí)間:2018年12月27日 10:01:38   作者:今天老子來(lái)巡山  
這篇文章主要介紹了Python閉包思想與用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Python閉包的概念、原理、使用方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python閉包思想與用法。分享給大家供大家參考,具體如下:

淺談 python 的閉包思想

首先 python的閉包使用方法是:在方法A內(nèi)添加方法B,然后return 方法B 注意,return的時(shí)候不要添加任何參數(shù),包括()

這樣,通過(guò)調(diào)用方法A 返回的是一個(gè)function 對(duì)象,如 demo=方法A 可以直接使用 demo(參數(shù)) 將調(diào)用方法B 這里不用關(guān)注方法B的方法名,

只需要關(guān)注參數(shù)就可以了,demo(參數(shù)) 這里的參數(shù)其實(shí)就是閉包的方法B的參數(shù),可以多個(gè)參數(shù)或者元祖一起使用。

其次 在Python中創(chuàng)建一個(gè)閉包可以歸結(jié)為以下三點(diǎn):

  • 閉包函數(shù)必須有內(nèi)嵌函數(shù)
  • 內(nèi)嵌函數(shù)需要引用該嵌套函數(shù)上一級(jí)namespace中的變量
  • 閉包函數(shù)必須返回內(nèi)嵌函數(shù)

對(duì),沒(méi)錯(cuò),python的裝飾器就是使用了閉包。

好吧,最后再舉個(gè)栗子:

def test1(prefix):
  def test2(name):
    print('test2閉包內(nèi):',name)
  def test3(*name1):
    print('test3 閉包內(nèi):',name1)
  return test3
m = test1('prefix')
m("haha",'heihei')

打印結(jié)果:

D:\python\python.exe D:/Python_day/day1.py
test3 閉包內(nèi): ('haha', 'heihei')

這個(gè)例子說(shuō)明,當(dāng)函數(shù) test1 的生命周期結(jié)束之后,test1('prefix') 中的參數(shù) prefix 這個(gè)變量依然存在,生命周期不會(huì)隨著函數(shù)調(diào)用結(jié)束而消失。

為啥要用閉包呢? 感覺(jué)這個(gè)功能一般啊,畢竟回調(diào)函數(shù)是死的,只能回調(diào)一個(gè),但是有個(gè)函數(shù)就是能生成無(wú)數(shù)個(gè)對(duì)象,嗯,是的,這玩意和類(lèi)的功能有點(diǎn)相似。閉包可以被理解為一個(gè)只讀的對(duì)象,你可以給他傳遞一個(gè)屬性,但它只能提供給你一個(gè)執(zhí)行的接口,這就牽扯到的另一個(gè)特性:惰性求值

如:

# 偽代碼示意
class QuerySet(object):
  def __init__(self, sql):
    self.sql = sql
    self.db = Mysql.connect().corsor() # 偽代碼
  def __call__(self):
    return db.execute(self.sql)
  def query(sql):
    return QuerySet(sql)
result = query("select name from user_app")
if time > now:
  print result # 這時(shí)才執(zhí)行數(shù)據(jù)庫(kù)訪問(wèn)

上面這個(gè)不太恰當(dāng)?shù)睦诱故玖送ㄟ^(guò)閉包完成惰性求值的功能,但是上面query返回的結(jié)果并不是函數(shù),而是具有函數(shù)功能的類(lèi)。有興趣的可以去看看Django的queryset的實(shí)現(xiàn),原理類(lèi)似。

還有另一種用處:需要對(duì)某個(gè)函數(shù)的參數(shù)提前賦值的情況,當(dāng)然在Python中已經(jīng)有了很好的解決訪問(wèn) functools.parial,但是用閉包也能實(shí)現(xiàn)。

如:

def partial(**outer_kwargs):
  def wrapper(func):
    def inner(*args, **kwargs):
      for k, v in outer_kwargs.items():
        kwargs[k] = v
      return func(*args, **kwargs)
    return inner
  return wrapper
@partial(age=15)
def say(name=None, age=None):
  print name, age
say(name="the5fire")
# 當(dāng)然用functools比這個(gè)簡(jiǎn)單多了
# 只需要: functools.partial(say, age=15)(name='the5fire')

對(duì)于工廠函數(shù)的理解,感覺(jué)和閉包類(lèi)似,在創(chuàng)建主函數(shù)后返回的對(duì)象,可以直接傳參使用,其實(shí)這里返回的對(duì)象,就是一個(gè)類(lèi)。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python函數(shù)使用技巧總結(jié)》、《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 探索Python列表合并技術(shù)提高代碼靈活性

    探索Python列表合并技術(shù)提高代碼靈活性

    本文將深入研究Python中列表合并的幾種方法,通過(guò)詳細(xì)的示例代碼和細(xì)致的解釋?zhuān)尸F(xiàn)一場(chǎng)關(guān)于列表操作的精彩探險(xiǎn),無(wú)論是初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)者,通過(guò)學(xué)習(xí)本文,將更加熟練地運(yùn)用這些方法,提升代碼的效率和可讀性
    2024-01-01
  • Python數(shù)據(jù)序列化技術(shù)總結(jié)

    Python數(shù)據(jù)序列化技術(shù)總結(jié)

    在現(xiàn)代軟件開(kāi)發(fā)中,數(shù)據(jù)序列化是一個(gè)關(guān)鍵環(huán)節(jié),它允許我們將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為可存儲(chǔ)或可傳輸?shù)母袷?,Python提供了多種數(shù)據(jù)序列化技術(shù),每種技術(shù)都有其獨(dú)特的性能優(yōu)勢(shì)和適用場(chǎng)景,本文將詳細(xì)介紹幾種強(qiáng)大的Python數(shù)據(jù)序列化技術(shù),需要的朋友可以參考下
    2025-03-03
  • Pycharm調(diào)試程序技巧小結(jié)

    Pycharm調(diào)試程序技巧小結(jié)

    這篇文章主要介紹了Pycharm調(diào)試程序技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python使用range函數(shù)計(jì)算一組數(shù)和的方法

    python使用range函數(shù)計(jì)算一組數(shù)和的方法

    這篇文章主要介紹了python使用range函數(shù)計(jì)算一組數(shù)和的方法,涉及Python中range函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • python正則實(shí)現(xiàn)提取電話(huà)功能

    python正則實(shí)現(xiàn)提取電話(huà)功能

    這篇文章主要為大家詳細(xì)介紹了python正則實(shí)現(xiàn)提取電話(huà)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理的實(shí)現(xiàn)代碼

    使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理的實(shí)現(xiàn)代碼

    Python作為數(shù)據(jù)科學(xué)領(lǐng)域的熱門(mén)編程語(yǔ)言,提供了豐富的庫(kù)和工具來(lái)處理和清洗數(shù)據(jù),本文將介紹如何使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理,并提供相應(yīng)的代碼示例,需要的朋友可以參考下
    2024-05-05
  • 解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問(wèn)題

    解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問(wèn)題

    今天小編就為大家分享一篇解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例

    基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例

    今天小編就為大家分享一篇基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 基于Python實(shí)現(xiàn)繪制屬于你的世界地圖

    基于Python實(shí)現(xiàn)繪制屬于你的世界地圖

    Python之所以這么流行,是因?yàn)樗粌H能夠應(yīng)用于科技領(lǐng)域,還能用來(lái)做許多其他學(xué)科的研究工具,繪制地圖便是其功能之一。本文我們將用matplot工具包之一的  mpl_toolkits  來(lái)繪制世界地圖,需要的可以參考一下
    2022-11-11
  • 解密Python中的作用域與名字空間

    解密Python中的作用域與名字空間

    名字空間對(duì)于 Python 來(lái)說(shuō)是一個(gè)非常重要的概念,并且與名字空間這個(gè)概念緊密聯(lián)系在一起的還有名字、作用域這些概念,下面就來(lái)剖析這些概念是如何體現(xiàn)的
    2023-02-02

最新評(píng)論

成武县| 柞水县| 辽中县| 长乐市| 广河县| 苍山县| 安顺市| 时尚| 杨浦区| 泸定县| 华坪县| 屏东市| 杭锦旗| 滨海县| 景德镇市| 三河市| 黑龙江省| 拜城县| 旬阳县| 河东区| 永年县| 英超| 囊谦县| 托克逊县| 赞皇县| 霍城县| 平度市| 张北县| 马龙县| 石首市| 黑龙江省| 镇沅| 恩施市| 荃湾区| 高密市| 鄂托克旗| 米林县| 广东省| 土默特左旗| 江西省| 霸州市|