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

Python閉包及裝飾器運(yùn)行原理解析

 更新時間:2020年06月17日 08:59:03   作者:吞風(fēng)吻雨ii  
這篇文章主要介紹了python閉包及裝飾器運(yùn)行原理解析,文中通過示例代碼介紹的非常詳細(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àn)樗婚]包引用了。

二、裝飾器

裝飾器其實(shí)就是閉包的應(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實(shí)現(xiàn)網(wǎng)站微信登錄的示例代碼

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

    這篇文章主要介紹了python實(shí)現(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é)議對交換機(jī)進(jìn)行配置的方法

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

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

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

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

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

    Flask,作為一個靈活的微型 web 框架,提供了會話(Session)和 Cookies 管理的能力,本文將深入探討 Flask 中的會話和 Cookies 的概念、工作機(jī)制以及應(yīng)用實(shí)例,希望對大家有所幫助
    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實(shí)戰(zhàn)串口助手_解決8串口多個發(fā)送的問題

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

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

最新評論

集安市| 寻乌县| 宝丰县| 淳化县| 西盟| 星子县| 淮滨县| 普宁市| 大丰市| 肥城市| 武宁县| 顺昌县| 临汾市| 日土县| 贵定县| 格尔木市| 德令哈市| 志丹县| 平阴县| 务川| 广汉市| 汉源县| 随州市| 海兴县| 浏阳市| 涿鹿县| 灵宝市| 辽源市| 梓潼县| 盘锦市| 宣恩县| 汾阳市| 来凤县| 阜城县| 囊谦县| 通辽市| 汉源县| 广德县| 佛山市| 抚宁县| 三明市|