Discuss / Python / 请问:廖老师说装饰器不能改变原函数的行为,这个行为具体是指什么呢?

请问:廖老师说装饰器不能改变原函数的行为,这个行为具体是指什么呢?

Topic source

萌13131313

#1 Created at ... [Delete] [Delete and Lock User]

看上一个提问廖老师的回答说:装饰器不能改变原函数的行为。那么这个行为具体是指什么呢?

在代码中,我觉得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!')

萌13131313

#2 Created at ... [Delete] [Delete and Lock User]

第二句话说得有点问题,应该是这样的:

在代码中,我觉得log()函数的行为主体是通过print()打印字符串,所以callbe应该是一种适用于这种没有return返回值的函数装饰器。

风飞浅停

#3 Created at ... [Delete] [Delete and Lock User]

一个完整的装饰器是适用于任何函数的,无论是有没有具体的返回值。

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

你写了个函数:

def sum(x, y):
    return x + y

现在,用了装饰器得不到正确的结果了,这就改变了sum函数的行为

萌13131313

#5 Created at ... [Delete] [Delete and Lock User]

明白了,谢谢廖老师和楼上的朋友回答!


  • 1

Reply