Можно ли передать словарь в обертке на Python? - PullRequest
0 голосов
/ 20 мая 2019

У меня есть функция, которая принимает некоторые аргументы и использует некоторые переменные (но не все) в моем словаре:

def my_fun(arg1, arg2, arg3, **my_dict):
    does something...

    return output

Мне нужно создать оболочку для этой функции, которая принимает только 1 аргумент, потому что яиспользуя пакет многопроцессорного пула (который допускает только 1 аргумент):

def wrapper(arg):
    output = my_fun(arg)

Можно ли каким-то образом пропустить arg1, arg2, arg3, **my_dict через оболочку, используя arg?

Когда я пытаюсь:

def wrapper(**arg):
    output = my_fun(arg)

Я получаю ошибку TypeError: wrapper() takes 3 positional arguments but 4 were given. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Вы не можете поместить **dict в свою оболочку, потому что ** является частью синтаксиса сигнатуры функции и не имеет значения в другом месте.

Вы хотите, чтобы my_fun принимал 3 обязательных позиционных аргумента, за которыми следуют ноль или более ключевых аргументов, и вы хотите, чтобы они были в оболочке, которую вы можете передать как один аргумент. Один из способов сделать это - передать диктант вашей функции

kwargs=dict(arg1=1, arg2=2, arg3=3, arg4="four", arg5="five")
output = my_fun(**kwargs)

Затем внутри my_fun проведите собственную проверку на наличие обязательных аргументов arg1, arg2, arg3.

Хотя я согласен с Клаусом Д. в том, что вы, возможно, пытаетесь решить не-проблему здесь.

0 голосов
/ 20 мая 2019
dic = {"a":1,"b":2}

def my_fun(arg1, arg2, arg3, **dic):
    output = arg1, arg2, arg3, dic
    return output

def wrapper(arg):
    return my_fun(arg[0],arg[1], arg[2], **dic)


x = wrapper([1,2,3, dic])
print(x)

выход:

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