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

Python閉包及裝飾器運行原理解析

 更新時間:2020年06月17日 08:59:03   作者:吞風(fēng)吻雨ii  
這篇文章主要介紹了python閉包及裝飾器運行原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一、閉包

閉包從形式上來說是在外部函數(shù)中定義內(nèi)部函數(shù),并且內(nèi)部函數(shù)引用了外部函數(shù)的變量,此變量叫做自由變量。

或者說是將組成函數(shù)的語句和這些語句的執(zhí)行環(huán)境打包在一起。

閉包滿足的條件:

必須有一個內(nèi)嵌函數(shù)

內(nèi)嵌函數(shù)必須使用外部函數(shù)的變量

外部函數(shù)的返回值必須是內(nèi)嵌函數(shù)

def closure():
 value = []
 def fun(tmp):
  value.append(tmp)
  return value
 return fun

cc = closure() 
cc(0) #[0] 等同于closure(fun(0))
cc(1) #[0,1]
cc(2) #[0,1,2]

外部函數(shù)closure中有變量value和內(nèi)部函數(shù)fun,并且內(nèi)部函數(shù)fun引用了自由變量value,當(dāng)執(zhí)行cc = closure()時,就產(chǎn)生了一個閉包fun,該閉包持有只有變量value,當(dāng)函數(shù)closure生命周期結(jié)束后,value依然存在,因為它被閉包引用了。

二、裝飾器

裝飾器其實就是閉包的應(yīng)用,只不過其傳遞的是函數(shù)。

def add_time(fun):
 def wrapper():
  print('time: 12:00')
  return fun()
 return wrapper

def add_format(fun):
 def wrapper():
  print('\n')
  return fun()
 return wrapper

@add_format #等同于demo = add_format(add_time(demo))
@add_time #等同于 demo = add_time(demo)
def demo():
 return 'hello world!'

另外,裝飾器會將demo函數(shù)的元信息丟失,例如__name__等等。

例如demo函數(shù)的__name__會由'demo'變成了'wrapper',這時需要用到functools庫,在wrapper函數(shù)前加上@functools.wraps(fun):

import functools

def add_time(fun):
 @functools.wraps(fun)
 def wrapper():
  print('time: 12:00')
  return fun()
 return wrapper

def add_format(fun):
 @functools.wraps(fun)
 def wrapper():
  print('\n')
  return fun()
 return wrapper

@add_format #等同于demo = add_format(add_time(demo))
@add_time #等同于 demo = add_time(demo)
def demo():
 return 'hello world!'

例如給任意函數(shù)加上打印時間的功能的裝飾器:

def metric(fn):
 start=time.time()
 @functools.wraps(fn)
 def wrapper(*args,**kw):
  end=time.time()
  print('%s executed in %s ms' % (fn.__name__,start-end))
  return fn(*args,**kw)
 return wrapper

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中defaultdict與dict的差異詳情

    Python中defaultdict與dict的差異詳情

    這篇文章主要介紹了Python中defaultdict與dict的差異,在collections模塊中的defauldict使用時與dict有何不同,為何我們用dict中的key值不存在時會報錯,而defaudict不會報錯,下面文章做出解答,需要的朋友可以參考一下
    2021-11-11
  • 全網(wǎng)最全python庫selenium自動化使用詳細(xì)教程

    全網(wǎng)最全python庫selenium自動化使用詳細(xì)教程

    這篇文章主要介紹了python庫selenium自動化使用詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-01-01
  • python實現(xiàn)網(wǎng)站微信登錄的示例代碼

    python實現(xiàn)網(wǎng)站微信登錄的示例代碼

    這篇文章主要介紹了python實現(xiàn)網(wǎng)站微信登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 如何在scrapy中集成selenium爬取網(wǎng)頁的方法

    如何在scrapy中集成selenium爬取網(wǎng)頁的方法

    這篇文章主要介紹了如何在scrapy中集成selenium爬取網(wǎng)頁的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python使用paramiko模塊通過ssh2協(xié)議對交換機進行配置的方法

    python使用paramiko模塊通過ssh2協(xié)議對交換機進行配置的方法

    今天小編就為大家分享一篇python使用paramiko模塊通過ssh2協(xié)議對交換機進行配置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python 根據(jù)csv表頭、列號讀取數(shù)據(jù)的實現(xiàn)

    python 根據(jù)csv表頭、列號讀取數(shù)據(jù)的實現(xiàn)

    這篇文章主要介紹了python 根據(jù)csv表頭、列號讀取數(shù)據(jù)的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 一文帶你深入理解Flask中的Session和Cookies

    一文帶你深入理解Flask中的Session和Cookies

    Flask,作為一個靈活的微型 web 框架,提供了會話(Session)和 Cookies 管理的能力,本文將深入探討 Flask 中的會話和 Cookies 的概念、工作機制以及應(yīng)用實例,希望對大家有所幫助
    2023-12-12
  • Python計數(shù)器collections.Counter用法詳解

    Python計數(shù)器collections.Counter用法詳解

    本文主要介紹了Python計數(shù)器collections.Counter用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python 命令行傳參方法總結(jié)

    python 命令行傳參方法總結(jié)

    這篇文章主要介紹了python 命令行傳參方法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python實戰(zhàn)串口助手_解決8串口多個發(fā)送的問題

    python實戰(zhàn)串口助手_解決8串口多個發(fā)送的問題

    今天小編就為大家分享一篇python實戰(zhàn)串口助手_解決8串口多個發(fā)送的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評論

和平县| 昌都县| 晋城| 桐柏县| 靖宇县| 平罗县| 榆树市| 麻江县| 高邑县| 平邑县| 驻马店市| 洪雅县| 视频| 曲阜市| 马公市| 公主岭市| 平利县| 耒阳市| 三门峡市| 凤城市| 海宁市| 连云港市| 道真| 漾濞| 营口市| 丰原市| 常熟市| 鄂托克前旗| 广州市| 甘孜| 天柱县| 甘泉县| 启东市| 沁水县| 白河县| 鲁山县| 德江县| 南川市| 额敏县| 武功县| 交口县|