python利用裝飾器進(jìn)行運(yùn)算的實(shí)例分析
今天想用python的裝飾器做一個(gè)運(yùn)算,代碼如下
>>> 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ù)是不能運(yùn)算的??!
怎么辦呢?
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)在實(shí)現(xiàn)的時(shí)候,有一些細(xì)節(jié)需要被注意。例如,被裝飾后的函數(shù)其實(shí)已經(jīng)是另外一個(gè)函數(shù)了(函數(shù)名等函數(shù)屬性會發(fā)生改變)
Python的functools包中提供了一個(gè)叫wraps的decorator來消除這樣的副作用。寫一個(gè)decorator的時(shí)候,最好在實(shí)現(xiàn)之前加上functools的wrap,它能保留原有函數(shù)的名稱和docstring。
以上所述就是本文的 全部內(nèi)容了,希望大家能夠喜歡。
- 實(shí)例講解Python編程中@property裝飾器的用法
- Python中使用裝飾器來優(yōu)化尾遞歸的示例
- Python黑魔法@property裝飾器的使用技巧解析
- python中函數(shù)總結(jié)之裝飾器閉包詳解
- 深入理解python中的閉包和裝飾器
- Python的幾個(gè)高級語法概念淺析(lambda表達(dá)式閉包裝飾器)
- 淺析Python編寫函數(shù)裝飾器
- Python裝飾器基礎(chǔ)詳解
- 分析Python中設(shè)計(jì)模式之Decorator裝飾器模式的要點(diǎn)
- Python裝飾器入門學(xué)習(xí)教程(九步學(xué)習(xí))
- 簡單上手Python中裝飾器的使用
- 深入學(xué)習(xí)Python中的裝飾器使用
相關(guān)文章
python使用response.read()接收json數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇python使用response.read()接收json數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python實(shí)現(xiàn)將一段文字復(fù)制到所選的文件當(dāng)中
這篇文章主要為大家詳細(xì)介紹了Python如何將一段文字復(fù)制到所選的文件當(dāng)中,文中的示例代碼講解詳細(xì), 感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Python數(shù)據(jù)可視化實(shí)現(xiàn)正態(tài)分布(高斯分布)
這篇文章主要介紹了Python數(shù)據(jù)可視化實(shí)現(xiàn)正態(tài)分布(高斯分布),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

