2010-06-28 2 views
42

Я хочу передать все аргументы, переданные функции (func1) в качестве аргументов другой функции (func2) внутри func1 Это может быть сделано с *args, *kwargs в вызываемом func1 и передавая их до func2, но есть ли другой способ?Переходя все аргументы функции другой функции

Первоначально

def func1(*args, **kwargs): 
    func2(*args, **kwargs) 

но если моя func1 подпись

def func1(a=1, b=2, c=3): 

, как я могу отправить их всех func2, без использования

def func1(a=1, b=2, c=3): 
    func2(a, b, c) 

Есть ли способ, как в JavaScript callee.arguments?

+0

, возможно, связано: http://stackoverflow.com/questions/1136673/when-should-i-use-varargs -in-design-a-python-api –

+0

Я не вижу, как это может быть полезно ... – jcao219

+0

Это еще не все, что полезно, но иногда я пишу функцию с множеством аргументов, а также скучно копировать их и над. – roopesh

ответ

33

Явное лучше, чем неявное, но если вы действительно не хотите, чтобы набрать несколько символов:

def func1(a=1, b=2, c=3): 
    func2(**locals()) 

locals() все локальные переменные, так что вы не можете установить любые дополнительные ВАР перед вызовом func2 или они тоже пройдут.

+5

Это будет иметь недостаток, который, если вы создали локальные переменные перед вызовом 'func2', тогда они также будут переданы' func2'. –

+2

Возможно, вы могли бы скопировать местных жителей прямо в начале функции? – Bwmat

+0

ya, копирование в порядке, я думаю. – roopesh

9

При условии, что аргументы func1 только ключевые аргументы, вы могли бы сделать это:

def func1(a=1, b=2, c=3): 
    func2(**locals()) 
Смежные вопросы