码迷,mamicode.com
首页 > 编程语言 > 详细

python利用装饰器进行运算

时间:2015-07-24 16:18:39      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

今天想用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‘


原来是不能这样弄的  函数与函数是不能运算的啊!

怎么办呢?

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)在实现的时候,有一些细节需要被注意。例如,装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变)

Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring

python利用装饰器进行运算

标签:

原文地址:http://my.oschina.net/jastme/blog/483424

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!