解析 **kwargs
Parsing **kwargs
我正在寻找一种更优雅的 kwarg 解析方式。我对 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 />'
因为 kwargs
如果没有使用关键字参数,将是一个空字典。
注意 1:由于 **kwargs
允许您传入任何内容,因此这允许在 SubElement 上创建任何内容作为属性,这可能不是所需的意图,如果kwargs 中的任何值都将在其他地方使用,例如函数的标志。
注2:变量名args
和kwargs
只是约定俗成的。您可以使用 **atrib
并将 attrib=attrib
传递给 SubElement,它的工作原理是一样的。
我正在寻找一种更优雅的 kwarg 解析方式。我对 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 />'
因为 kwargs
如果没有使用关键字参数,将是一个空字典。
注意 1:由于 **kwargs
允许您传入任何内容,因此这允许在 SubElement 上创建任何内容作为属性,这可能不是所需的意图,如果kwargs 中的任何值都将在其他地方使用,例如函数的标志。
注2:变量名args
和kwargs
只是约定俗成的。您可以使用 **atrib
并将 attrib=attrib
传递给 SubElement,它的工作原理是一样的。