欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中函數(shù)總結(jié)之裝飾器閉包詳解

 更新時(shí)間:2016年06月12日 17:05:05   投稿:jingxian  
下面小編就為大家?guī)硪黄猵ython中函數(shù)總結(jié)之裝飾器閉包詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1、前言

函數(shù)也是一個(gè)對(duì)象,從而可以增加屬性,使用句點(diǎn)來表示屬性。

如果內(nèi)部函數(shù)的定義包含了在外部函數(shù)中定義的對(duì)象的引用(外部對(duì)象可以是在外部函數(shù)之外),那么內(nèi)部函數(shù)被稱之為閉包。

2、裝飾器

裝飾器就是包裝原來的函數(shù),從而在不需要修改原來代碼的基礎(chǔ)之上,可以做更多的事情。

裝飾器語法如下:

@deco2
@deco1
def func(arg1,arg2...):
  pass

這個(gè)表示了有兩個(gè)裝飾器的函數(shù),那么表示的含義為:func = deco2(deco1(func))

無參裝飾器語法如下:

@deco
def func():
  pass

表示的含義為func = deco(func)

有參裝飾器語法如下:

@deco(deco_args)
def func():
  pass

表示的含義為:func = deco(deco_args)(func)

多個(gè)裝飾器有的有參數(shù)有的沒參數(shù),語法如下:

@deco2(arg1,arg2)
@deco1
def func():
  pass

表示的含義為foo = deco2(arg1,arg2)deco1(func)

裝飾器實(shí)際上就是函數(shù),接受的也是函數(shù)對(duì)象。

在執(zhí)行函數(shù)之前,可以運(yùn)行預(yù)備代碼,也可以在執(zhí)行代碼后做一些清理工作。

看見裝飾器的時(shí)候,很可能在里面找到一些代碼,它定義了某個(gè)函數(shù),并在定義內(nèi)的某處嵌入了對(duì)目標(biāo)函數(shù)的調(diào)用或者至少一點(diǎn)引用。

3、裝飾器作用

裝飾器的作用如下:

引入日志;增加計(jì)時(shí)邏輯來檢測性能;給函數(shù)加入了事物的能力

以下例子表示為引入了計(jì)時(shí)的邏輯來檢測性能,如下:

#!/usr/bin/env python

from time import ctime,sleep

def tsfunc(func): #裝飾器函數(shù)接受的是一個(gè)函數(shù)對(duì)象
  def wrappedFunc():
    print '[%s] %s() called' % (ctime(),func.__name__)
    return func() #在這里調(diào)用了函數(shù)對(duì)象,也就是表示裝飾器是裝飾了原來的函數(shù),從而在原來函數(shù)的基礎(chǔ)上進(jìn)行了一些操作
  return wrappedFunc

@tsfunc #裝飾器
def foo():
  pass

foo()
sleep(4)

for i in range(2):
  sleep(1)
  foo()

 執(zhí)行結(jié)果如下:

[root@python 420]# python deco.py 
[Tue Apr 19 16:15:01 2016] foo() called
[Tue Apr 19 16:15:06 2016] foo() called
[Tue Apr 19 16:15:07 2016] foo() called

在裝飾器函數(shù)中,增加了時(shí)間戳并且調(diào)用了目標(biāo)函數(shù),裝飾器的返回值是一個(gè)包裝了函數(shù)。

4、閉包

如果在一個(gè)內(nèi)部函數(shù)里,對(duì)在外部作用于(但不是全局作用域)的變量進(jìn)行引用,那么內(nèi)部函數(shù)被認(rèn)為是閉包c(diǎn)losure,定義在外部函數(shù)內(nèi)的但由內(nèi)部函數(shù)引用或者使用的變量稱之為自由變量。

閉包的主要作用如下:

安裝計(jì)算;隱藏狀態(tài);在函數(shù)對(duì)象和作用域中隨意的切換。

回調(diào)就是函數(shù),閉包也是函數(shù),但是能攜帶一點(diǎn)額外的作用域。

#!/usr/bin/env python

def counter(start_at=0):
  count = [start_at]
  def incr():
    count[0] += 1
    return count[0]
  return incr

count= counter(5)
print count()
print count()

在上面的例子可以看到,函數(shù)內(nèi)部的函數(shù)incr引用了外部的變量count,并且每次進(jìn)行加一,從而這個(gè)變量count稱之為自由變量。

以上這篇python中函數(shù)總結(jié)之裝飾器閉包詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pytorch之tensorboard無法啟動(dòng)和顯示問題及解決

    Pytorch之tensorboard無法啟動(dòng)和顯示問題及解決

    這篇文章主要介紹了Pytorch之tensorboard無法啟動(dòng)和顯示問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • PyTorch如何利用parameters()獲取模型參數(shù)

    PyTorch如何利用parameters()獲取模型參數(shù)

    這篇文章主要介紹了PyTorch如何利用parameters()獲取模型參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python算法應(yīng)用實(shí)戰(zhàn)之隊(duì)列詳解

    Python算法應(yīng)用實(shí)戰(zhàn)之隊(duì)列詳解

    隊(duì)列是一種先進(jìn)先出(First-In-First-Out,F(xiàn)IFO)的數(shù)據(jù)結(jié)構(gòu)。隊(duì)列被用在很多地方,比如提交操作系統(tǒng)執(zhí)行的一系列進(jìn)程、打印任務(wù)池等,一些仿真系統(tǒng)用隊(duì)列來模擬銀行或雜貨店里排隊(duì)的顧客。下面就介紹了Python中隊(duì)列的應(yīng)用實(shí)戰(zhàn),需要的可以參考。
    2017-02-02
  • python的一些加密方法及python 加密模塊

    python的一些加密方法及python 加密模塊

    這篇文章主要介紹了python的一些加密方法及python加密模塊,本文通過實(shí)例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • 使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一)

    使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一)

    這篇文章主要介紹了使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一),本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python學(xué)習(xí)之線程池與GIL全局鎖詳解

    Python學(xué)習(xí)之線程池與GIL全局鎖詳解

    本文我們將學(xué)習(xí)線程池的創(chuàng)建與全局鎖。線程池的創(chuàng)建于進(jìn)程池的原理是相同的;關(guān)于GIL全局鎖,暫時(shí)沒有代碼上的練習(xí),而是對(duì)其概念進(jìn)行一個(gè)簡單的啟蒙,感興趣的可以了解一下
    2022-04-04
  • Python中re模塊:匹配開頭/結(jié)尾(^/$)

    Python中re模塊:匹配開頭/結(jié)尾(^/$)

    本文主要介紹了Python中re模塊:匹配開頭/結(jié)尾(^/$),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 利用Python實(shí)現(xiàn)原創(chuàng)工具的Logo與Help

    利用Python實(shí)現(xiàn)原創(chuàng)工具的Logo與Help

    這篇文章主要給大家介紹了關(guān)于如何利用Python實(shí)現(xiàn)原創(chuàng)工具的Logo與Help的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-12-12
  • python 并發(fā)下載器實(shí)現(xiàn)方法示例

    python 并發(fā)下載器實(shí)現(xiàn)方法示例

    這篇文章主要介紹了python 并發(fā)下載器實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了并發(fā)下載器相關(guān)原理及Python并發(fā)下載視頻的相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • 詳解pandas DataFrame的查詢方法(loc,iloc,at,iat,ix的用法和區(qū)別)

    詳解pandas DataFrame的查詢方法(loc,iloc,at,iat,ix的用法和區(qū)別)

    這篇文章主要介紹了詳解pandas DataFrame的查詢方法(loc,iloc,at,iat,ix的用法和區(qū)別),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論