2013-12-22 57 views
0

在下面的示例代碼中,我們有一個undecorated函數fun()和一個裝飾函數wrappedfun()IPython筆記本中裝飾函數的Tab完成

對於未修飾功能fun,按TAB鍵在IPython的筆記本電腦下面的函數名稱的左括號後顯示呼叫簽名fun(x=0, y=1)但對於裝飾版本wrappedfun你完成情況作爲wrappedfun(*args, **kwargs)。有什麼方法可以告訴IPython在TAB完成期間顯示原始呼叫簽名?

from functools import wraps 

def mywrapper(func): 
''' simple wrapper ''' 
    @wraps(func) 
    def wrapper(*args, **kwargs): 
     print('inside wrapper') 
     return func(*args, **kwargs) 
    return wrapper 

def fun(x=0, y=1): 
    ''' Docstring for fun ''' 
    return x + y 

@mywrapper 
def wrappedfun(x=0, y=1): 
    ''' Docstring for wrapped another fun ''' 
    return x + y 

回答

1

我認爲問題在於有:

def wrapper(*args, **kwargs): 
    print('inside wrapper') 
    return func(*args, **kwargs) 

即使@wraps(func)wrapper可能需要更多的參數,所以你看到的簽名是wrapper簽名。沒有辦法神奇地知道你想要做什麼。

這不是特定於IPython的,可以在其他地方找到像Preserving signature of decorated function這樣的堆棧溢出。希望這能解決你的問題。

+0

謝謝!你提供的鏈接回答了我的問題。 –