python利用裝飾器進(jìn)行運算的實例分析
今天想用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)的時候,有一些細(xì)節(jié)需要被注意。例如,被裝飾后的函數(shù)其實已經(jīng)是另外一個函數(shù)了(函數(shù)名等函數(shù)屬性會發(fā)生改變)
Python的functools包中提供了一個叫wraps的decorator來消除這樣的副作用。寫一個decorator的時候,最好在實現(xiàn)之前加上functools的wrap,它能保留原有函數(shù)的名稱和docstring。
以上所述就是本文的 全部內(nèi)容了,希望大家能夠喜歡。
- 實例講解Python編程中@property裝飾器的用法
- Python中使用裝飾器來優(yōu)化尾遞歸的示例
- Python黑魔法@property裝飾器的使用技巧解析
- python中函數(shù)總結(jié)之裝飾器閉包詳解
- 深入理解python中的閉包和裝飾器
- Python的幾個高級語法概念淺析(lambda表達(dá)式閉包裝飾器)
- 淺析Python編寫函數(shù)裝飾器
- Python裝飾器基礎(chǔ)詳解
- 分析Python中設(shè)計模式之Decorator裝飾器模式的要點
- Python裝飾器入門學(xué)習(xí)教程(九步學(xué)習(xí))
- 簡單上手Python中裝飾器的使用
- 深入學(xué)習(xí)Python中的裝飾器使用
相關(guān)文章
python創(chuàng)建與遍歷List二維列表的方法
這篇文章主要介紹了python創(chuàng)建與遍歷List二維列表的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-08-08快速掌握python權(quán)限功能設(shè)計實戰(zhàn)指南
在處理權(quán)限控制時,裝飾器能幫助我們以一種統(tǒng)一且簡潔的方式管理不同用戶對系統(tǒng)資源的訪問權(quán)限,本文將通過幾個簡單的示例逐步展示如何利用Python裝飾器實現(xiàn)從基礎(chǔ)到復(fù)雜的權(quán)限控制功能2024-01-01Django 解決model 反向引用中的related_name問題
這篇文章主要介紹了Django 解決model 反向引用中的related_name問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05