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

python 裝飾器功能以及函數(shù)參數(shù)使用介紹

 更新時間:2012年01月27日 20:50:22   作者:  
之前學習編程語言大多也就是學的很淺很淺,基本上也是很少涉及到裝飾器這些的類似的內容??偸怯X得是一樣很神奇的東西,舍不得學(嘿嘿)。今天看了一下書籍。發(fā)現(xiàn)道理還是很簡單的
簡單的說:裝飾器主要作用就是對函數(shù)進行一些修飾,它的出現(xiàn)是在引入類方法和靜態(tài)方法的時候為了定義靜態(tài)方法出現(xiàn)的。例如為了把foo()函數(shù)聲明成一個靜態(tài)函數(shù)
復制代碼 代碼如下:

class Myclass(object):
def staticfoo():
............
............
staticfoo = staticmethod(staticfoo)

可以用裝飾器的方法實現(xiàn):
復制代碼 代碼如下:

class Myclass(object):
  @staticmethod  
  def staticfoo():
    .........
    .........

這個例子很明顯很容易就可以看懂。

說到這里我們舉一個下面的例子,這個例子里面同時涉及到一個重要內容,就是對于python中的函數(shù)的本質理解。

代碼:
復制代碼 代碼如下:

# -*- coding: utf-8 -*-
from time import ctime
from time import sleep
def ftfunc(func):
def timef():
print "[%s] %s() called" % (ctime(),func.__name__)
return func()
return timef

@ftfunc
def foo():
print 'hello'

if __name__ == '__main__':

foo()
sleep(2)

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

運行這段代碼;我們可以看到終端依次會輸出以下內容:


其中ftfunc函數(shù)是我們自己自定義的一個函數(shù),這個函數(shù)是以一個函數(shù)作為參數(shù)的函數(shù),這也就滿足了作為一個裝飾器的要求,根據(jù)上面我們對于裝飾器的等價變換規(guī)則,這段代碼

復制代碼 代碼如下:

@ftfunc
def foo():
print 'hello'

可以轉換成以下的代碼:
復制代碼 代碼如下:

def foo():
print 'hello'

foo = ftfunc(foo)

再結合上面原來的代碼我們很快就可以體會到了裝飾器的作用。

但是我在編寫這段代碼的時候,有一個地方打錯了:

這段代碼:
復制代碼 代碼如下:

return func()
return timef

被我寫成了:
復制代碼 代碼如下:

return func
return timef

于是輸出結果就是不一樣,后來終于發(fā)現(xiàn)了一個重要的概念:"foo"是函數(shù)對象的引用,而"foo()"是函數(shù)對象的調用。關于對象引用是python的重要的基礎概念,在python中一切都是對象,同時類型是屬于對象,而不是變量。一切的變量只是對象的引用,相當于讓這個變量指向這個對象?!癴oo”正好可以理解成一個變量,只不過是它指向一個函數(shù)的對象。而“foo()”是函數(shù)對象的調用,即調用這個對象,是要執(zhí)行這個函數(shù)的功能的。這里需要慢慢理解品味?;诖耍?

這樣的一段代碼運行結果和剛才是一模一樣的。注意比較與剛才那段代碼的不同之處,更加有利于理解。
復制代碼 代碼如下:

# -*- coding: utf-8 -*-
from time import ctime
from time import sleep
def ftfunc(func):
def timef():
print "[%s] %s() called" % (ctime(),func.__name__)
return func
return timef

@ftfunc
def foo():
print 'hello'

if __name__ == '__main__':

foo()()
sleep(2)

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

此代碼運行結果:

其實還可以分別對返回的timef函數(shù)加上括號,看看結果會是怎么樣的。可以更好理解python中函數(shù)的概念。

相關文章

  • 詳解Python匿名函數(shù)(lambda函數(shù))

    詳解Python匿名函數(shù)(lambda函數(shù))

    這篇文章主要介紹了Python匿名函數(shù)(lambda函數(shù)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • pygame實現(xiàn)俄羅斯方塊游戲(AI篇1)

    pygame實現(xiàn)俄羅斯方塊游戲(AI篇1)

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)俄羅斯方塊游戲AI的第1篇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 使用PyTorch實現(xiàn)限制GPU顯存的可使用上限

    使用PyTorch實現(xiàn)限制GPU顯存的可使用上限

    從?PyTorch?1.4?版本開始,引入了一個新的功能,可以允許用戶為特定的?GPU?設備設置進程可使用的顯存上限比例,下面我們就來看看具體實現(xiàn)方法吧
    2024-03-03
  • Python實現(xiàn)圖像手繪效果的方法詳解

    Python實現(xiàn)圖像手繪效果的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Python語言實現(xiàn)圖像手繪效果,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-09-09
  • Python使用type動態(tài)創(chuàng)建類操作示例

    Python使用type動態(tài)創(chuàng)建類操作示例

    這篇文章主要介紹了Python使用type動態(tài)創(chuàng)建類操作,結合實例形式詳細分析了Python使用type動態(tài)創(chuàng)建類的具體原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • python實現(xiàn)倒計時小工具

    python實現(xiàn)倒計時小工具

    這篇文章主要為大家詳細介紹了python實現(xiàn)倒計時小工具,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • PyQt5編程擴展之資源文件的使用教程

    PyQt5編程擴展之資源文件的使用教程

    PyQt5支持Qt的資源系統(tǒng),這是用于在應用程序中嵌入圖片和翻譯文件等資源的工具,下面這篇文章主要給大家介紹了關于PyQt5編程擴展之資源文件使用的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • pandas基于時間序列的固定時間間隔求均值的方法

    pandas基于時間序列的固定時間間隔求均值的方法

    今天小編就為大家分享一篇pandas基于時間序列的固定時間間隔求均值的方法,具有好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 在Windows上安裝和配置 Jupyter Lab 作為桌面級應用程序教程

    在Windows上安裝和配置 Jupyter Lab 作為桌面級應用程序教程

    這篇文章主要介紹了在Windows上安裝和配置 Jupyter Lab 作為桌面級應用程序教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python實現(xiàn)HTML轉Word的示例代碼

    Python實現(xiàn)HTML轉Word的示例代碼

    這篇文章主要為大家詳細介紹了使用Python實現(xiàn)HTML轉Word的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12

最新評論

威海市| 遵义县| 罗甸县| 临夏市| 平昌县| 田林县| 康平县| 南丹县| 深泽县| 长治县| 阳高县| 辽阳县| 漳州市| 弥渡县| 万州区| 工布江达县| 德令哈市| 缙云县| 沂水县| 上饶县| 福清市| 新沂市| 民和| 平湖市| 明溪县| 稷山县| 永胜县| 德保县| 长治县| 米易县| 东丰县| 南郑县| 兴安县| 五原县| 马山县| 高唐县| 西青区| 临朐县| 高要市| 报价| 胶州市|