2013-10-27 63 views
2

所以我的問題特別針對下面例子頂部的裝飾器。我不明白lowercasedecorator函數的第三行。我很困惑它爲什麼會返回一個列表,如果它在方括號中,這意味着它是一個列表的權利?另外,我不完全理解該行'func(* args)'的末尾,這是否意味着'func'的任意參數(在這種情況下,它將是displayPeople)?這個Python裝飾器裏發生了什麼?

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

提示:displayPeople沒有裝飾器會返回什麼類型的對象? –

+0

so displayPeople()returns ... A list?那種混淆了我,因爲本=人(「本」,「20」,「4252454」),所以我認爲這是一個元組。 – stephan

+0

很難在[PEP 318](http://www.python.org/dev/peps/pep-0318/) – 2013-10-27 23:36:26

回答

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

在調用func*語法(即,displayPeople)穿過同一位置參數即wrapper接收到的元組。

wrapper確實返回一個列表。

因爲裝飾器如何工作的,與func = displayPeople創建函數wrapperdisplayPeople裝飾版本。

所以,裝飾者的效果是displayPeople的修飾版本調用未修飾版本,小寫返回的值並將它們作爲列表返回。