2010-07-19 4 views
2

- это возможность «упаковать» аргументы в python? У меня есть следующие функции в библиотеке, что я не могу изменить (упрощенно):Аргументы Python pack?

def g(a,b=2): 
    print a,b 

def f(arg): 
    g(arg) 

я могу сделать

o={'a':10,'b':20} 
g(**o) 
10 20 

, но я могу/как я могу передать это через f?

Это то, что я не хочу:

f(**o) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() got an unexpected keyword argument 'a' 

f(o) 
{'a': 10, 'b': 20} 2 

ответ

2

f должен принимать произвольные (позиционные и именованные аргументы):

def f(*args, **kwargs): 
    g(*args, **kwargs) 

Если вы не хотите f принимать позиционные аргументы, оставьте в стороне *args.

+0

Проблема в том, что я не могу изменить f или g, это не мое :) Конечно, я мог бы написать ошибку. – user395589

+0

Извините, я неверно истолковал ваш вопрос в этом отношении. Тогда я думаю, что у вас нет другого выбора, кроме повторного выполнения 'f' или запроса изменения в библиотеке. – Philipp

+0

В-третьих, 'f' не дает возможности передать значение' b' в 'g', поэтому вы должны указать ошибку –