Выбор функции случайным образом и вызов ее с соответствующими атрибутами в Python

Ответы на Выбор функции случайным образом говорят нам, как выбрать и вызвать случайную функцию из списка, используя 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 ответ


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

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)())