|
本帖最后由 安德伯格 于 2018-3-15 22:33 编辑
在尝试廖大在装饰器一章中的课后习题时遇到了一些问题。
题目是这样的:请编写一个decorator,能在函数调用的前后打印出'begin call'和'end call'的日志。
网络上的大大们给出的代码基本如下:
import functools
def log(text1, text2):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print(text1)
out = func(*args, **kw)
print(text2)
return out
return wrapper
return decorator
@log('begin call', 'after call')
def now(time):
print(time)
now('2016')
而我在尝试的过程中将now函数更改成含有返回值的如下形式时:
def now(time):
return time
再调用print(now('2016'))则会发生先输出'after call'和'begin call',最后输出‘2016’的情况。
出现这种情况的原因在于print与return的区别,这个我能理解,但是具体要如何修改代码才能让其对于存在返回值的函数也起作用呢?
希望大神能帮我解答一下,不胜感激。
|
|