python利用裝飾器進行運算的實例分析
今天想用python的裝飾器做一個運算,代碼如下
>>> def mu(x):
def _mu(*args,**kwargs):
return x*x
return _mu
>>> @mu
def test(x,y):
print '%s,%s' %(x,y)
>>> test(3,5)
Traceback (most recent call last):
File "<pyshell#111>", line 1, in <module>
test(3,5)
File "<pyshell#106>", line 3, in _mu
return x*x
TypeError: unsupported operand type(s) for *: 'function' and 'function'
原來是不能這樣弄的 函數(shù)與函數(shù)是不能運算的啊!
怎么辦呢?
In [1]: from functools import wraps In [2]: def mu(x): ...: @wraps(x) ...: def _mu(*args,**kwargs): ...: x,y=args ...: return x*x ...: return _mu ...: In [3]: @mu ...: def test(x,y): ...: print '%s,%s' %(x,y) ...: In [4]: test(3,4) Out[4]: 9
Python裝飾器(decorator)在實現(xiàn)的時候,有一些細節(jié)需要被注意。例如,被裝飾后的函數(shù)其實已經(jīng)是另外一個函數(shù)了(函數(shù)名等函數(shù)屬性會發(fā)生改變)
Python的functools包中提供了一個叫wraps的decorator來消除這樣的副作用。寫一個decorator的時候,最好在實現(xiàn)之前加上functools的wrap,它能保留原有函數(shù)的名稱和docstring。
以上所述就是本文的 全部內(nèi)容了,希望大家能夠喜歡。
相關文章
python使用response.read()接收json數(shù)據(jù)的實例
今天小編就為大家分享一篇python使用response.read()接收json數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python數(shù)據(jù)可視化實現(xiàn)正態(tài)分布(高斯分布)
這篇文章主要介紹了Python數(shù)據(jù)可視化實現(xiàn)正態(tài)分布(高斯分布),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

