То, что вы должны работать, но вы можете сделать это:
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
будет пустой dict, если аргументы ключевого слова не используются.
Примечание 1: с **kwargs
позволяет передавать ничего, это позволяет создать что-нибудь в качестве атрибута на подэлементе который не может быть желаемым намерением, если любые из значений в kwargs должны быть использованы в других местах, например, флаги для функции.
Примечание 2: имена переменных args
и kwargs
- это просто конвенция. Вы можете использовать **atrib
и передать attrib=attrib
в SubElement, и он будет работать точно так же.
Как насчет 'name = kwargs.get ('thing', None)' –
Возможный дубликат [Правильный способ использования \ * \ * kwargs в Python] (http://stackoverflow.com/questions/1098549/proper -tw-use-kwargs-in-python) – IanAuld
Примечание: 'kwargs' - это просто дикт и имеет все методы dict. – OozeMeister