python装饰器的问题

一般情况下
如果不用decorator,也可以这样表达
subject_matter_function = outer_decorator(inner_decorator(subject_matter_function())))
abcd = subject_matter_function()
所以问题下方代码注释里

```python
def big_container(collective_material):
    def wrapper(our_function):
        def internal_wrapper(*args):
            our_function(*args)
            print('<strong>*</strong> The whole order would be from {} packed with {}'.format(our_function.__name__, collective_material))      #这里的our_function.__name__为什么不显示warehouse_decorator,而显示 internal_wrapper,能否解释一下
            print()
        return internal_wrapper
    return wrapper

def warehouse_decorator(material):
    def wrapper(our_function):
        def internal_wrapper(*args):
            our_function(*args)
            print('<strong>*</strong> Wrapping items from {} with {}'.format(our_function.__name__, material))
            #这里的our_function.__name__就显示pac_books
        return internal_wrapper
    return wrapper

@big_container('plain cardboard')
@warehouse_decorator('bubble foil')
def pack_books(*args):
    print("We'll pack books:", args)

pack_books('Alice in Wonderland', 'Winnie the Pooh')

```

多个装饰器的装饰过程是: 离函数最近的装饰器先装饰,然后外面的装饰器再进行装饰,由内到外的装饰过程,big_container的装饰实际是对warehouse_decorator返回函数的装饰

一个函数只能有一个装饰器
你在pack_books前面加了2个艾特
只有warehouse_decorator才是它的装饰器(距离近的一个)
big_container就是个普通的函数调用

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632