看上一个提问廖老师的回答说:装饰器不能改变原函数的行为。那么这个行为具体是指什么呢?
在代码中,我觉得log()函数的行为主体是通过print()打印字符串,所以应该是一种适用于这种没有return返回值的函数装饰器。
源代码如下:
def callbe(func): def wrapper(*args,**kw): print('begin call: %s' % func.__name__) func(*args,**kw) print ('end call: %s' % func.__name__) return wrapper @callbe def log(): print('Hello,world!')
第二句话说得有点问题,应该是这样的:
在代码中,我觉得log()函数的行为主体是通过print()打印字符串,所以callbe应该是一种适用于这种没有return返回值的函数装饰器。
一个完整的装饰器是适用于任何函数的,无论是有没有具体的返回值。
你写了个函数:
def sum(x, y): return x + y
现在,用了装饰器得不到正确的结果了,这就改变了sum函数的行为
明白了,谢谢廖老师和楼上的朋友回答!
Sign in to make a reply
萌13131313
看上一个提问廖老师的回答说:装饰器不能改变原函数的行为。那么这个行为具体是指什么呢?
在代码中,我觉得log()函数的行为主体是通过print()打印字符串,所以应该是一种适用于这种没有return返回值的函数装饰器。
源代码如下: