2016-08-19 3 views
0

Мне нужно объявить функционал динамически во время выполнения, которое имеет произвольное количество именованных аргументов (ключевые слова), так что другая библиотека может вызывать эту функцию со словарем в качестве аргументов. Вот пример того, что мне нужно:Закрытие с аргументами ключевого слова с именем после параметров в Python 2.7

def generateFunction(*kwrds): 
    #kwrds are a bunch of strings 
    def functionTheLibraryCalls('''an argument for every string in kwrds '''): 
    #Get all arguments in a tuple in the order as listed above 
    result = tuple(args) 
    #Code that needs to be executed inside the library, 
    #it can handle a variable number of arguments 
    return result 
    return functionTheLibraryCalls 


f1 = generateFunction('x', 'y','z') 
print f1(x = 3,y = 2, z = 1) 
#>> (3,2,1) 
f2 = generateFunction('a', 'b') 
print f2(a = 10, b = 0) 
#>> (10,0) 

Возможно ли это в python 2.7? Параметры для f1 и f2 будут фактически переданы как dict. Если лямбда лучше для этого, это тоже хорошо.

Спасибо!

ответ

0

Это то, что вы хотите?

def generateFunction(*names): 
    #kwrds are a bunch of strings 
    def functionTheLibraryCalls(**kwrds): 
     #Code that needs to be executed inside the library, 
     #it can handle a variable number of arguments 
     print names, kwrds 
     return 42 
    return functionTheLibraryCalls 

Вы можете даже удалить *names на самом деле.

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

  • Нет связанных вопросов^_^