Разбор **kwargs
Я ищу более элегантный способ разбора kwargs. Я все еще мокрый под Python, и это будет мое первое использование kwargs в def. Итак, вот сценарий:
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 для se, если есть **kwargs. Это правильный способ сделать это?
Спасибо за любую помощь!
Дэн
1 ответ
Что у вас будет работать, но вы можете сделать это:
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, и он будет работать точно так же.