2

所以我的问题专门针对下面示例顶部的装饰器。我不明白小写装饰器函数的第 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()
4

2 回答 2

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

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

wrapper确实返回一个列表。

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

所以,装饰器的作用是,装饰后的版本displayPeople调用未装饰的版本,将返回的值小写,并以列表的形式返回。

于 2013-10-27T23:40:37.223 回答
0

第 3 行是一个列表推导。可以用来代替 for 循环。

func(*args)确实是对第 1 行传入的元组进行解包。

于 2013-10-27T23:37:33.260 回答