2015-11-09 2 views
1

Цель состоит в том, чтобы построить функцию, чтобы построить обучающий набор в проекте машинного обучения. У меня есть несколько наборов функций, которые я хотел бы попробовать (отдельно, 2 на 2, в сочетании ..), поэтому я помещаю их в качестве параметров функции.Итерация над функциональными параметрами

Я также добавил словарь для вызова функций импорта выбранных наборов функций.

Например, если я хочу импортировать набор «features1», я позвоню import_features1().

У меня есть проблема перебора параметров функции. Я пробовал использовать **kwargs, но он не работает так, как я ожидал.

Вот моя функция:

def construct_XY(features1=False, features2=False, features3=False, **kwargs): 
    # -- function dict 
    features_function = {features1: import_features1, 
         features2: import_features2, 
         features3: import_features3} 
    # -- import target 
    t_target = import_target() 

    # -- (trying to) iterate over parameters 
    for key, value in kwargs.items(): 
     if value is True: 
      t_features = features_function(key)() 
    # -- Concat chosen set of features with the target table 
      t_target = pd.concat([t_target, t_features], axis=1) 

    return t_target 

Должен ли я использовать locals() как предложено here?

Что мне не хватает?

+0

Можете ли вы исправить ваш отступ? – styvane

+0

спасибо, что-то пошло не так во время копирования/вставки. –

ответ

1

Вы, вероятно, хотите использовать что-то вроде этого

# Only accepts keyword attributes 
def kw_only(**arguments): 
    # defaults 
    arguments['features1'] = arguments.get('features1', False) 
    arguments['features2'] = arguments.get('features2', False) 
    arguments['features3'] = arguments.get('features3', False) 

    for k, v in arguments.items(): 
     print (k, v) 

print(kw_only(one=1, two=2)) 

используя эту конструкцию, вам нужно будет определить по умолчанию в вашей функции. Вы сможете передавать только аргументы ключевых слов, и они смогут перебирать все их.

Смежные вопросы