Реализация «функции вызова функции» - PullRequest
0 голосов
/ 23 апреля 2009

Я хотел бы написать немного кода, который вызывает функцию, указанную в данном аргументе. EG:

def caller(func):
    return func()

Однако я также хотел бы указать необязательные аргументы для функции 'caller', чтобы 'caller' вызывал 'func' с указанными аргументами (если они есть).

def caller(func, args):
# calls func with the arguments specified in args

Есть ли простой, питонный способ сделать это?

Ответы [ 2 ]

12 голосов
/ 23 апреля 2009

Это можно сделать с помощью списков произвольных аргументов и распаковки списков аргументов .

>>> def caller(func, *args, **kwargs):
...     return func(*args, **kwargs)
...
>>> def hello(a, b, c):
...     print a, b, c
...
>>> caller(hello, 1, b=5, c=7)
1 5 7

Не уверен почему вы чувствуете необходимость сделать это, хотя.

7 голосов
/ 23 апреля 2009

Это уже существует как функция apply , хотя считается устаревшей из-за нового синтаксиса * args и ** kwargs.

>>> def foo(a,b,c): print a,b,c
>>> apply(foo, (1,2,3))
1 2 3
>>> apply(foo, (1,2), {'c':3})   # also accepts keyword args

Однако синтаксис * и **, как правило, является лучшим решением. Выше эквивалентно:

>>> foo(*(1,2), **{'c':3})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...