У меня есть большая и сложная функция, которая может быть уменьшена до этой функции-прототипа для демонстрационных целей:
def test(a, b, op="", ex=[]):
print(op)
ex = len(ex)
if op=='add':
return a+b+ex
elif op=='mult':
return (a*b)+ex
elif op=='div':
return (a%b)+ex
else:
return -1
Я пытался запустить две работы в этой функции параллельно с возможными различными аргументами ключевого слова, связанными с ними. Я могу работать с такими аргументами, если бы не было аргументов ключевых слов:
o1, o2 = Parallel(n_jobs=2)(delayed(test)(*args)
for args in (
[1, 2],
[101, 202]
))
Для передачи аргументов ключевых слов я подумал об этом:
o1, o2 = Parallel(n_jobs=2)(delayed(test)(*args, **kwargs)
for args, kwargs in (
[1, 2, op='div'],
[101, 202, op='sum', ex=[1,2,9]]
))
Но, очевидно, это должно привести к некоторой синтаксической ошибке на op='div'
часть. Я также попробовал это:
o1, o2 = Parallel(n_jobs=2)(delayed(test)(*args, **kwargs)
for *args, kwargs in (
[1, 2, {op: 'div'}],
[101, 202, {op:'sum', ex:[1,2,9]}]
))
Но тогда это покажет эту ошибку:
NameError: имя 'op' не определено
I также пробовал это:
o1, o2 = Parallel(n_jobs=2)(delayed(test)(*args, **kwargs)
for args, kwargs in (
[(1, 2), {op: 'div'}],
[(101, 202), {op:'sum', ex:[1,2,9]}]
))
Та же ошибка:
NameError: имя 'op' не определено
Итак, я попробовал это:
o1, o2 = Parallel(n_jobs=2)(delayed(test)(*args, **kwargs)
for args,kwargs in (
[1, 2, {'op': 'div'}],
[101, 202, {'op':'sum', 'ex':[1,2,9]}]
))
Теперь я получаю это:
ValueError: слишком много значений для распаковки (ожидается 2)
Как передать аргументы ключевого слова в функция. Чего мне не хватает?