python利用裝飾器進行運算

來源:互聯網
上載者:User

標籤:

今天想用python的裝飾器做一個運算,代碼如下

>>> def mu(x):def _mu(*args,**kwargs):return x*xreturn _mu>>> @mudef 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*xTypeError: unsupported operand type(s) for *: ‘function‘ and ‘function‘


原來是不能這樣弄的  函數與函數是不能運算的啊!

怎麼辦呢?

In [1]: from functools import wrapsIn [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)在實現的時候,有一些細節需要被注意。例如,被裝飾後的函數其實已經是另外一個函數了(函數名等函數屬性會發生改變)

Python的functools包中提供了一個叫wraps的decorator來消除這樣的副作用。寫一個decorator的時候,最好在實現之前加上functools的wrap,它能保留原有函數的名稱和docstring。

python利用裝飾器進行運算

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.