Как отправить словарь в функцию, которая принимает ** kwargs?

У меня есть функция, которая принимает параметры подстановочных слов:

def func(**kargs):
    doA
    doB

Как мне отправить ему словарь?

13.10.2009 11:28:05
возможный дубликат преобразования Python dict в kwargs?
Olli 1.02.2014 21:02:47
5 ОТВЕТОВ
РЕШЕНИЕ

Просто используйте, func(**some_dict)чтобы позвонить.

Это описано в разделе 4.7.4 руководства по питону .

Обратите внимание , что то же самое dict будет не передается в функцию. Новая копия создана, поэтому some_dict is not kwargs.

59
13.10.2009 11:31:36
«Создана новая копия». Где я могу найти официальную документацию для этого поведения?
jan 10.11.2017 12:39:41

func(**mydict)

это будет означать kwargs = mydict внутри функции

все ключи mydict должны быть строками

5
13.10.2009 11:48:04

Это не 100% ясно, ваш вопрос, но если вы хотите пропускать dictчерез kwargs, вы просто сделать что Dict часть другого Словаре, например , так:

my_dict = {}                       #the dict you want to pass to func
kwargs  = {'my_dict': my_dict }    #the keyword argument container
func(**kwargs)                     #calling the function

Тогда вы можете поймать my_dictв функции:

def func(**kwargs):
    my_dict = kwargs.get('my_dict')

или...

def func(my_dict, **kwargs):
    #reference my_dict directly from here
    my_dict['new_key'] = 1234

Я часто использую последний, когда мне передается один и тот же набор опций различным функциям, но некоторые функции используют только некоторые опции (надеюсь, это имеет смысл ...). Но, конечно, есть миллион способов сделать это. Если вы расскажете немного о своей проблеме, мы, скорее всего, сможем помочь вам лучше.

8
13.10.2009 12:18:54

для python 3.6 просто поставьте ** перед именем словаря

def lol(**kwargs):
    for i in kwargs:
        print(i)

my_dict = {
    "s": 1,
    "a": 2,
    "l": 3
}

lol(**my_dict)
2
5.10.2017 04:58:24

Простой способ передачи параметров с помощью переменной, аргументов и kwargs с помощью Decorator

def printall(func):
    def inner(z,*args, **kwargs):
        print ('Arguments for args: {}'.format(args))
        print ('Arguments for kwargs: {}'.format(kwargs))
        return func(*args, **kwargs)
    return inner

@printall #<-- you can mark Decorator,it will become to send some variable data to function  
def random_func(z,*y,**x):
    print(y)
    print(x)
    return z

z=1    
y=(1,2,3)
x={'a':2,'b':2,'c':2}

a = random_func(z,*y,**x)
0
12.08.2019 08:43:23