Skip to main content
 首页 » 编程设计

python之这个 Python 装饰器内部发生了什么

2025年05月04日898°冷暖

所以我的问题专门针对下面示例顶部的装饰器。我不明白 lowercasedecorator 函数的第 3 行。我很困惑为什么它返回一个列表,如果它在那些方括号中,就意味着它是一个列表,对吧?另外,我不完全理解“func(*args)”那一行的结尾,这是否意味着“func”的任意参数(在本例中是 displayPeople)?

def lowercasedecorator(func): 
    def wrapper(*args): 
        return [i.lower() for i in func(*args)] 
    return wrapper 
 
class People(): 
    totalpeople = 0 
    def __init__(self, name, age, phone): 
        self.name=name 
        self.age=age 
        self.phone=phone 
        People.totalpeople += 1 
 
    @lowercasedecorator 
    def displayPeople(self): 
        return self.name, self.age, self.phone 
 
ben = People("bEn", "20", "5034950293") 
 
print ben.displayPeople() 

请您参考如下方法:

def wrapper(*args): 
    return [i.lower() for i in func(*args)] 

*调用 func 的语法(即 displayPeople )传递与 wrapper 相同的位置参数收到。

wrapper确实返回一个列表。

由于装饰器的工作方式,函数 wrapper使用 func = displayPeople 创建是 displayPeople 的装饰版本.

所以,装饰器的效果就是displayPeople的装饰版调用未修饰的版本,小写返回值,并将它们作为列表返回。