Python, как наиболее элегантно передавать произвольные переменные из функции в функцию? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть словарь vars = {'a' : 1, 'b' : 2} с парами ключ / значение. В будущем этот словарь может быть расширен новыми переменными. Я хотел бы вызвать func1 с переменными из vars dict. В func1 я буду использовать ноль или более переменных из vars dict. Если func1 должен вызывать func2, я бы хотел, чтобы func2 получал все переменные из исходной vars dict. Func2 будет использовать ноль или более переменных из vars dict.

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

def func1(**kwargs):
    print(f'func1 a = {a}, b is not important')
    return func2(**kwargs)

def func2(**kwargs):
    return f'func2 a = {a}, b = {b}, both variables are important'


vars = {'a' : 1, 'b' : 2}
print(func1(**vars))

Но это не работает, потому что kwargs - словарь. Я могу распаковать переменные в начале функции, если необходимо, как:

a = kwargs['a']
b = kwargs['b']

, но если новая переменная «c» появится в исходном словаре vars, мне придется изменить эти распаковки в начале каждой функции. Я также мог бы установить параметры def func1(a, b): и def func2(a, b):, но мне нужно воссоздать kwargs dict, чтобы отправить его дальше. Опять же, если появится новая переменная «c», мне придется изменить сигнатуру каждой функции. Я также мог бы определить func1, как показано ниже, чтобы передать переменную ниже:

def func1(a, kwargs):
    print(f'func1 a = {a}, b is not important')
    kwargs['a'] = a
    return func2(**kwargs)

Возможно, чтобы создать объект и установить его свойства как пары ключ / значение vars dict, а затем отправить этот объект как параметр функции ?

Как наиболее элегантно передавать произвольные переменные от функции к функции в этом сценарии?

С уважением.

1 Ответ

0 голосов
/ 07 мая 2020

Почему бы просто не сохранить переменные в словаре и не обращаться к ним таким образом?

def func1(**kwargs):
    print(f"func1 a = {kwargs['a']}, b is not important")
    return func2(**kwargs)

def func2(**kwargs):
    return f"func2 a = {kwargs['a']}, b = {kwargs['b']}, both variables are important"


vars = {'a' : 1, 'b' : 2}
print(func1(**vars))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...