python - 解析 **kwargs

标签 python function keyword-argument

我正在寻找一种更优雅的方式来解析 kwargs。我对 Python 还很陌生,这将是我第一次在 def 中使用 kwargs。所以这是场景:

def function(arg, arg, **kwargs)
    other_function(arg, arg, **kwargs)

def other_functions(arg, arg, **kwargs)
    if kwargs:
         name = etree.SubElement(params,'thing','value from kwargs')
         return name
    name = etree.SubElement(params,'thing')
    return name

我觉得有一个更好的方法来处理这个问题,而不是使用 if 来判断是否有 **kwargs。这是正确的方法吗?

感谢您的帮助!

最佳答案

你所拥有的可以工作,但你可以这样做:

def other_function(parent, *args, **kwargs):
    return etree.SubElement(parent, 'thing', attrib=kwargs)

*args 成为变量 args,它实际上只是一个值的元组。同样,**kwargs 成为变量 kwargs,它实际上只是一个字典。

SubElement 有一个可选的 attrib 参数,该参数允许您传入值字典以作为 XML 属性添加到元素中。因此,您实际上可以将 kwargs 作为值传递。

因此,像这样调用 other_function 将产生以下输出:

>>> print etree.tostring(other_function(parent, my_attrib='my value'))
'<thing my_attrib="my value" />'

在不传入任何关键字参数的情况下调用 other_function 将产生以下输出:

>>> print etree.tostring(other_function(parent))
'<thing />'

如果没有使用关键字参数,as kwargs 将是一个空字典。

注释 1:由于 **kwargs 允许您传入任何内容,因此这允许在子元素上创建任何内容作为属性,这可能不是所需的意图,如果kwargs 中的任何值都将在其他地方使用,例如该函数的标志。

注释 2:变量名称 argskwargs 只是约定。您可以使用 **atrib 并将 attrib=attrib 传递给 SubElement,它的工作原理是一样的。

关于python - 解析 **kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35618244/

相关文章:

python - gstreamer uri 与文件 : Cannot play local video file

function - 使用默认值和/或没有特定顺序的 Erlang 函数调用

Python点击传递未指定数量的kwargs

python - 如何在函数签名中使用 *args 和 **kwargs 返回默认值

function - 调用函数时声明参数名称

Python:获取 '3 years ago today' 的日期时间

python - Pillow virtualenv 安装失败 : "command ' gcc-4. 2' failed"

python - Soundcloud API 在服务器端 Python 身份验证上返回 401 错误

c - 缩进 : space after function name in definition

c++ - 内联函数联动