python-3.x 装饰器将所有位置参数显示为关键字参数[已关闭]

x9ybnkn6  于 2023-02-14  发布在  Python
关注(0)|答案(1)|浏览(85)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
4天前关闭。
这篇文章是4天前编辑并提交审查的。
Improve this question
我正在使用python 3.9和jupyter notebook,试图用不同的方式处理args和kwargs,但是我传入的每个args都被解释为关键字arg,这与这个问题(Default arguments in a function when using decorators)的行为完全相反。

from makefun import wraps

def outer(func):
    @wraps(func)
    def inner(*args, **kwargs):
        print("args:", args)
        print("kwargs:", kwargs)

    return inner

@outer
def simple(x, y=100):
    pass

simple(10)

然后我得到

args: ()
kwargs: {'x': 10, 'y': 100}

我期望输出打印args:10克朗:{}

svmlkihl

svmlkihl1#

使用functools,而不是makefun软件包

使用 Package 可以确保预期的行为。如果使用层库,则需要检查实现是否相同。

(编辑,因为问题已关闭,上一个答案在下面)

您的代码很好,请使用装饰器和函数定义重新运行jupyter单元格
查看输出,您正在运行旧版本的装饰器。您的代码:

simple(10)

您的输出:

args: ()
kwargs: {'x': 10, 'y': 100}

xy不可能凭空出现。
如果您在交互式解释器中运行代码,您将看到正确的行为。

如果您有Jupyter notebook,不要忘记用装饰器定义和函数定义重新加载整个页面或两个单元格。

相关问题