import functools
def log(text):
if isinstance(text,str):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
print('begin call')
a = func(*args, **kw)
print('end call')
return a
# return func(*args, **kw) 如果是return 这个内容是又执行了一编结果。跟return a 有什么区别呢。
return wrapper
return decorator
else:
@functools.wraps(text)
@log('execute')
def now1():
print('2015-3-25')
@log('')
def now2():
print(now1())
print(now2())
执行下结果
execute now1():
begin call
2015-3-25
end call
None
上面有人写了这样的答案,我按着思路原路写了下,看执行结果,如果是字符串的话,now1执行了两遍,now2只执行了一遍。差别就在
return func(*args, **kw)
我不明白:return 函数和 return a 的区别
Sign in to make a reply
空心菜的烦恼777
import functools
def log(text):
if isinstance(text,str):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
print('begin call')
a = func(*args, **kw)
print('end call')
return a
# return func(*args, **kw) 如果是return 这个内容是又执行了一编结果。跟return a 有什么区别呢。
return wrapper
return decorator
else:
@functools.wraps(text)
def wrapper(*args, **kw):
print('begin call')
a = func(*args, **kw)
print('end call')
return a
return wrapper
@log('execute')
def now1():
print('2015-3-25')
@log('')
def now2():
print('2015-3-25')
print(now1())
print(now2())
执行下结果
execute now1():
begin call
2015-3-25
end call
2015-3-25
None
begin call
2015-3-25
end call
None
上面有人写了这样的答案,我按着思路原路写了下,看执行结果,如果是字符串的话,now1执行了两遍,now2只执行了一遍。差别就在
a = func(*args, **kw)
return a
return func(*args, **kw)
我不明白:return 函数和 return a 的区别