小结的作业-根据大佬启发写的。。。
Topic source重复调用两次now,改成下面貌似就可以了
print('begin call %s' % fn.__name__)
x=fn(*args,**kw)
print('end call %s' % fn.__name__)
return x
def log(fn1, *args):
#如果是带参装饰器,则传入的fn1一定是装饰器括号内的参数,如字符串等,
# 因此if下为两层函数,加上最外层的函数,与一般的带参装饰器的三层函数一样运行。
if isinstance(fn1, str):
def decorator(fn):
@functools.wraps(fn)
def wrapper(*args,**kw):
print('%s %s():' % (fn1, fn.__name__))
fn(*args, **kw)
print('end call %s' % fn.__name__)
return wrapper
return decorator
#如果是不带参数的装饰器,那么最先被传入的fn1必定是函数,
# 函数是不会被判断成字符串类型的,所以else下只有一层函数再加上最外层的函数,
# 一共为两层函数,运行时与不带参的装饰器一样运行。
else:
@functools.wraps(fn1)
def wrapper(*args,**kw):
print('begin call %s():' % fn1.__name__)
fn1(*args,**kw)
print('end call %s' % fn1.__name__)
return wrapper
#测试
@log
def now():
print('2015-3-25')
now()
print()
@log('excute')
def now2():
print('2015-3-25')
now2()
在你的代码基础上再结合大佬的注释改的哈 这样now函数不用输出两次
- 1
不知小岛