Отправить словарь в функцию, которая не принимает ** kwargs? - PullRequest
3 голосов
/ 17 февраля 2012

Я только недавно начал изучать чудеса ** kwargs, но я столкнулся с камнем преткновения.Есть ли способ отправки ключевых слов словаря в функцию, которая не принимает аргументы ключевых слов?Рассмотрим следующую простую настройку:

def two(**kwargs):
  return kwargs['second']

def three(**kwargs):
  return kwargs['third']

parameterDict = {}
parameterDict['first'] = 1
parameterDict['second'] = 2
parameterDict['third'] = 3

Я использую некоторый внешний код, который взаимодействует в следующем стиле:

fitObject = externalCode(two, first=1, second=2)

Проблема в том, что «externalCode» не принимает ** kwargs,так есть ли умный способ получить информацию о словаре в приемлемой форме?

Кроме того, различные функции принимают в качестве параметров различные подмножества параметра Dict.Таким образом, функция «two» может принимать «первый» и «второй» параметры, она отклоняет «третий».И «три» принимает все три.

------------------------------------- РЕДАКТИРОВАТЬ -------------------------------------

Люди правильно прокомментировали, чтоприведенный выше код не потерпит неудачу - поэтому я разобрался в своей проблеме и не уверен, стоит ли делать репост или нет.Я делал что-то вроде этого:

def printHair(**kwargs):
    if hairColor == 'Black':
        print 'Yep!'
    pass

personA = {'hairColor':'blue'}
printHair(**personA)
NameError: global name 'hairColor' is not defined

И, очевидно, исправление заключается в явном включении hairColor при определении: printHair (hairColor, ** kwargs) в первую очередь.

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012
>>> def externalCode(two, first=1, second=2):
...     print two, first, second
... 
>>> params = {'two': 9, 'first': 8, 'second': 7}
>>> externalCode(**params)
9 8 7
0 голосов
/ 20 февраля 2014

Как насчет использования get

def printHair(**kwargs):
#check if hair colour is in kwargs
#if it is not you can set a default, otherwise default is None
   personA['hairColor'] = kwargs.get('hairColor','Blue')
   printHair(**personA)
...