这个Python装饰器里面发生了什么?

时间:2013-10-27 23:27:43

标签: python decorator

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

2 个答案:

答案 0 :(得分:1)

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

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

wrapper确实会返回一个列表。

由于装饰器的工作原理,使用wrapper 创建的函数func = displayPeople displayPeople的装饰版本。

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

答案 1 :(得分:0)

第3行是list comprehension。可以使用它来代替for循环。

func(*args)确实正在解包第1行传入的元组。