Выбор функции случайным образом и вызов ее с соответствующими атрибутами в Python - PullRequest
1 голос
/ 26 марта 2020

Ответы на Выбор функции случайным образом говорят нам, как выбрать и вызвать случайную функцию из списка, используя random.choice.

Но что, если функции в списке принимают разные атрибуты? Как мы вызываем функцию с соответствующими атрибутами?

Пример:

from random import choice

def fun_1():
    ...
def fun_2(x: int):
    ...
def fun_3(y: bool):
    ...

my_integer = 8
my_boolean = True

random_function_selector = [fun_1, fun_2, fun_3]

print(choice(random_function_selector)(???))

Функция fun_1 не принимает атрибутов. Всякий раз, когда выбирается fun_2, я хочу вызвать его с помощью my_integer, а всякий раз, когда выбирается fun_3, я хочу вызывать его с my_boolean.

Что поставить в скобках в последней строке?

Нужно ли полагаться на операторы if, чтобы проверить, какая случайная функция была выбрана, и выбрать соответствующий атрибут на основе этого ? Или есть ярлык?

1 Ответ

3 голосов
/ 26 марта 2020

Вы можете включить желаемые аргументы с функцией в список вариантов.

from random import choice

def fun_1():
    ...
def fun_2(x: int):
    ...
def fun_3(y: bool):
    ...

my_integer = 8
my_boolean = True

random_function_selector = [(fun_1,) (fun_2, my_integer) (fun_3, my_boolean)]
f, *args = choice(random_function_selector)
print(f(*args))

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

from functools import partial


random_function_selector = [partial(fun_1), partial(fun_2, my_integer), partial(func_3, my_boolean)]
print(choice(random_function_selector)())
...