选项卡完成IPython Notebook中的修饰函数

时间:2013-12-22 05:32:38

标签: python ipython ipython-notebook

在下面的示例代码中,我们有一个未修饰的函数fun()和一个装饰的wrappedfun()

对于未修饰的函数fun,在函数名后面的左括号后按下IPython笔记本中的TAB会将调用签名显示为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 个答案:

答案 0 :(得分:1)

我认为问题在于:

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

即使它@wraps(func)wrapper可能需要更多参数,因此您看到的签名是wrapper的签名。没有办法神奇地知道你想做什么。

这不是特定于IPython的,并且可以在像Preserving signature of decorated function这样的堆栈溢出的其他地方找到。希望这能解决你的问题。