Могу ли я передать функцию и переменное количество аргументов другой функции? - PullRequest
2 голосов
/ 05 ноября 2019

Может кто-нибудь сказать, каким будет лучший способ сделать это?

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

Так что будет правильным синтаксисом:

    def overall_function(function, arguments):
        function(arguments)
        do other stuff

Я бы хотел, чтобы аргументы были:

arg1 = 'foo', arg2 = 53, ...

Спасибо!

Ответы [ 3 ]

4 голосов
/ 05 ноября 2019

Взять переменное число аргументов:

def overall_function(function, *positional, **keyword):
    function(*positional, **keyword)

Теперь вы можете передавать аргументы, например:

overall_function(function, 1, 2, foo='bar')

, и функция будет выполняться как:

function(1, 2, foo='bar')
  • positional будет tuple: (1, 2) (это два позиционных аргумента).
  • keyword будет dict: {'foo': 'bar'} (этоключевой аргумент).
2 голосов
/ 05 ноября 2019

Ищу *args и **kwargs

def overall_function(function, *args, **kwargs):
    function(*args, **kwargs)
    do other stuff
1 голос
/ 05 ноября 2019

Может быть лучше передать лямбду, а не два аргумента, чтобы вы могли отложить выполнение функции до тех пор, пока она вам не понадобится, и при этом сохранить параметры, содержащиеся вместе

def overall_function(lambda_func):
    lambda_func()


overall_function(lambda: function(used,as,normal))
...