【问题标题】:inspect.getargvalues returns keyword only args as args instead of varargsinspect.getargvalues 仅返回关键字 args 作为 args 而不是 varargs
【发布时间】:2021-11-28 11:43:47
【问题描述】:

如何解释inspect.getargvalues 仅返回关键字 args 作为 args 而不是 varargs。这是错误还是文档错误?仅关键字参数不是关键字参数吗?我不明白。

inspect.getargvalues(frame)

获取有关传递到特定框架的参数的信息。返回一个命名元组 ArgInfo(args, varargs, keywords, locals)。参数 是参数名称的列表。可变参数和关键字是 * 和 ** 参数或无。 locals 是本地字典 给定框架。

import inspect
def fun(x, *, y):
    print (inspect.getargvalues(inspect.currentframe()))

输出:

fun (10, y=20)
ArgInfo(args=['x', 'y'], varargs=None, keywords=None, locals={'y': 20, 'x': 10})

【问题讨论】:

    标签: python python-3.x callstack keyword-argument code-inspection


    【解决方案1】:

    正如它所说:“可变参数和关键字是 * 和 ** 参数的名称”。您的函数没有任何 *** 参数。

    出现在这里的*

    def fun(x, *, y):
    

    仅用作位置参数和仅关键字参数之间的分隔符。

    这是设置varargskeywords 的函数示例:

    def fun(*x, **y):
        print(inspect.getargvalues(inspect.currentframe()))
    

    会产生:

    >>> fun(10, y=20)
    ArgInfo(args=[], varargs='x', keywords='y', locals={'x': (10,), 'y': {'y': 20}})
    

    【讨论】:

    • 我明白你的意思,因此我接受答案。但是,我很困惑为什么 **kwargs 被归类为关键字 args 而 * 后面的仅关键字 args 不是。很容易得出结论,keywords 代表关键字参数,inspect 处理它们的方式出乎意料地不同。社区如何接受这种不一致?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多