解析** kwargs

时间:2016-02-25 04:18:12

标签: python function kwargs

我正在寻找一种更优雅的解析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 to se如果有** kwargs。这是正确的方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

你有什么工作,但你可以这样做:

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 />'

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

注1 :由于**kwargs允许您传入任何内容,因此允许在SubElement上创建任何属性,如果有任何值,则可能不是所需的意图kwargs将用于其他地方,例如功能的标志。

注意2 :变量名称argskwargs只是惯例。您可以使用**atrib并将attrib=attrib传递给SubElement,它也可以正常工作。