2015-04-14 89 views
-2

我剛剛通過以下問題命中:空* args - python在這裏做什麼?

我有一個看起來somwhat類似如下的方法:

def funfun(fun,args): 
    fun(*args) 

現在,當通過好玩不帶任何參數和args是一個空的列表,Python會抱怨我通過了一個爭論。這是爲什麼?在這種情況下通過了什麼?

(在我真正的代碼,樂趣被稱爲樂趣(OBJ,*參數),但真的只需要一個參數,這個概念應該是相同的)

[編輯]

這是完整的代碼:

def invoke(self, object_self, method, proceed, args): 
    proxy_method = getattr(self.proxy, method.getName(), self.placeholder) 
    if proxy_method == self.placeholder: 
     return proceed.invoke(object_self,args) 
    else: 
     return proxy_method(object_self,*args) 
+2

發佈一個演示錯誤的示例以及實際的錯誤消息。你說什麼不應該發生,所以你必須在你沒有在這裏顯示的代碼中做錯了什麼。 – interjay

+0

你確定嗎?當我用'* empty'('empty == []')調用no-args函數時,它工作得很好...... – psmears

+0

: -/Ok我現在看到我的錯誤。我使用了一個綁定實例函數,並認爲它是未綁定的類函數。我的例子根本不顯示那個錯誤。 – kutschkem

回答

0

的這裏的錯誤是我誤以爲proxy_method是未綁定的,需要給予被叫做作爲參數的對象。除了object_self是錯誤的對象之外,getattr的結果實際上是綁定到代理實例的綁定方法,因此不需要傳遞代理對象。正確的代碼是:

def invoke(self, object_self, method, proceed, args): 
    proxy_method = getattr(self.proxy, method.getName(), self.placeholder) 
    if proxy_method == self.placeholder: 
     return proceed.invoke(object_self,args) 
    else: 
     return proxy_method(*args)