【问题标题】:Tab completion of decorated functions in IPython Notebook [duplicate]IPython Notebook中装饰函数的制表符完成[重复]
【发布时间】:2014-01-10 16:05:10
【问题描述】:

在下面的示例代码中,我们有一个未修饰的函数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

【问题讨论】:

    标签: python ipython ipython-notebook


    【解决方案1】:

    我认为问题出在那儿:

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

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

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

    【讨论】:

    • 谢谢!您提供的链接回答了我的问题。
    猜你喜欢
    • 2015-09-30
    • 2014-02-23
    • 1970-01-01
    • 2021-11-17
    • 2011-10-04
    • 2013-01-20
    • 2019-07-29
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多