日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python函数装饰器参数 参数_【转】python 装饰器功能以及函数参数使用

發布時間:2025/3/19 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python函数装饰器参数 参数_【转】python 装饰器功能以及函数参数使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前學習編程語言大多也就是學的很淺很淺,基本上也是很少涉及到裝飾器這些的類似的內容。總是覺得是一樣很神奇的東西,舍不得學(嘿嘿)。今天看了一下書籍。發現道理還是很簡單的。

簡單的說:裝飾器主要作用就是對函數進行一些修飾,它的出現是在引入類方法和靜態方法的時候為了定義靜態方法出現的。例如為了把foo()函數聲明成一個靜態函數

1 class Myclass(object):2 def staticfoo():3 ............4 ............ 5 staticfoo = staticmethod(staticfoo)

可以用裝飾器的方法實現:

1 class Myclass(object):2   @staticmethod  3   def staticfoo():4     .........5     .........

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

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

代碼:

1 #-*- coding: utf-8 -*-2 from time import ctime3 from time import sleep4 def ftfunc(func):5 def timef():6 print "[%s] %s() called" % (ctime(),func.__name__)7 return func()8 return timef9 10 @ftfunc11 def foo():12 print 'hello'13 14 if __name__ == '__main__':15 16 foo()17 sleep(2)18 19 for i in range(2):20 sleep(1)21 foo()

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

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

1 @ftfunc2 def foo():3 print 'hello'

可以轉換成以下的代碼:

1 def foo():2 print 'hello'3 4 foo = ftfunc(foo)

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

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

這段代碼:

1 return func()2 return timef

被我寫成了:

1 return func2 return timef

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

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

1 #-*- coding: utf-8 -*-2 from time import ctime3 from time import sleep4 def ftfunc(func):5 def timef():6 print "[%s] %s() called" % (ctime(),func.__name__)7 return func8 return timef9 10 @ftfunc11 def foo():12 print 'hello'13 14 if __name__ == '__main__':15 16 foo()()17 sleep(2)18 19 for i in range(2):20 sleep(1)21 foo()()

此代碼運行結果:

總結

以上是生活随笔為你收集整理的python函数装饰器参数 参数_【转】python 装饰器功能以及函数参数使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。