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