Это лучшее, что я мог придумать:
Если у вас есть пользовательский объект сопоставления, который вы хотите передать в функцию, принимающую аргументы ключевых слов, то он должен иметь набор ключей (которые могут генерироваться динамически, но это должен быть конечный набор) должен быть в состоянии сопоставить эти ключи как-то. Итак, если вы можете предположить, что у него будет __iter__
для получения ключей, и __getitem__
, который будет успешным для каждого из этих ключей, например ::
class Me(object):
def __init__(self):
pass
def __iter__(self):
return iter(['a', 'b', 'c'])
def __getitem__(self, key):
return 12
Скажите, что функция:
def myfunc(**kwargs):
print kwargs, type(kwargs)
Тогда мы можем передать это, сделав диктовку:
m = Me()
myfunc(**dict((k, m[k]) for k in m))
В результате:
{'a': 12, 'c': 12, 'b': 12} <type 'dict'>
Очевидно, это должно быть так, как это делается ... даже если вы передадите объект, полученный из dict
, функция все равно будет иметь dict
для kwargs:
class Me(dict): pass
m = Me()
print type(m) #prints <class '__Main__.Me'>
def myfunc(**kwargs):
print type(kwargs)
myfunc(**m) #prints <type 'dict'>
Поскольку звучит так, как будто вы хотели сделать что-то вроде возврата значения, основанного на том, какой была клавиша, без учета определенного набора клавиш, кажется, что вы не можете использовать функцию format
.