Как передать кортеж в качестве параметров функции - PullRequest
1 голос
/ 15 июля 2011

У меня есть кортеж, содержащий кортежи.

EVENT_MAPPING = (
    (func1, (paramA1, paramA2, paramA3)),
    (func2, (paramB1)),
    (func3, (paramC1, paramC2)),
)

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

func1(origin, paramA1, paramA2, paramA3)

Если они не являются параметром "origin", я могу позвонить благодаря:

args[0](args[1])

Но с дополнительным параметром («происхождение»), я не могу делать такие вещи.Я нашел способ сделать это, но это тяжело:

call = tuple(list(args[1]).insert(0,origin))
args[0](call)

Есть ли лучший способ сделать это?

Спасибо за вашу помощь

Ответы [ 3 ]

11 голосов
/ 15 июля 2011

Примерно так:

for func, args in EVENT_MAPPING:
  func(*args)

* извлекает (расширяет) внутренний кортеж, и они передаются функции в качестве аргументов.

1 голос
/ 15 июля 2011
for func, args in EVENT_MAPPING:
    func(origin, *args)
0 голосов
/ 15 июля 2011

Если вы хотите добавить источник к аргументам, должно работать что-то вроде этого:

for func, args in EVENT_MAPPING:
    func(*(origin,)+args)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...