Перейти к содержимому

Как передать словарь в функцию python

  • автор:

Распаковка аргументов для передачи в функцию Python

Бывают ситуации, когда для функции, требующей отдельных позиционных аргументов, значения этих аргументов уже находятся в списке или кортеже, и для вызова функции должны быть распакованы.

Например, встроенная range() функция ожидает отдельные аргументы start и stop . Если они не доступны отдельно, то можно распаковать аргументы из списка list или кортежа tuple , вызвав функцию с переменной этого списка/кортежа, а впереди нее поставить символ одной звездочки * :

# обычный вызов с отдельными аргументами >>> list(range(3, 6)) # [3, 4, 5] >>> args = [3, 6] # вызов с аргументами, распакованными из списка >>> list(range(*args)) # [3, 4, 5] 

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

>>> def parrot(voltage, state='a stiff', action='voom'): . print("-- This parrot wouldn't", action, end=' ') . print("if you put", voltage, "volts through it.", end=' ') . print("E's", state, "!") . >>> d = "voltage": "four million", "state": "bleedin' demised", "action": "VOOM"> >>> parrot(**d) # -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demis 
  • символом * — распаковывают последовательности в качестве элементов которых одно значение (списки, кортежи, множества)
  • два символа ** — распаковывают последовательности в качестве элементов которых имеется ключ и значение (словари)

Примеры распаковки списков и словарей с аргументами для функции:

date_inf = 'year': "2020", 'month': "12", 'day': "06"> f_name = " - - .txt".format(**date_inf) print(f_name) # 2020-12-06.txt fruits = ['lemon', 'orange', 'banana', 'tomato'] print(*fruits) # lemon orange banana tomato 

Распаковку аргументов можно использовать несколько раз в функции:

date_info = 'year': "2020", 'month': "01", 'day': "01"> track_info = 'artist': "Beethoven", 'title': 'Symphony No 5'> filename = " - - - - .txt".format(**date_info, **track_info) print(filename) # 2020-01-01-Beethoven-Symphony No 5.txt 
fruits = ['lemon', 'orange', 'banana', 'tomato'] first, second, *orher = fruits print(orher) # ['banana', 'tomato'] first, *orher = fruits print(orher) # ['orange', 'banana', 'tomato'] first, *middle, last = fruits print(middle) # ['orange', 'banana'] 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Функции это объекты
  • Функции могут иметь атрибуты
  • Функции могут храниться в структурах данных
  • Функции могут быть вложенными
  • Передача функции в качестве аргумента другой функции
  • Область видимости переменных функции
  • Операторы global и nonlocal
  • Параметры (аргументы) функции
  • Ключевые аргументы в определении функции Python
  • Значение аргумента по умолчанию в функциях Python
  • Варианты передачи аргументов в функцию Python
  • Переменные аргументов *args и **kwargs в функции Python
  • Распаковка аргументов для передачи в функцию Python
  • Как оцениваются аргументы при вызове функции?
  • Строгие правила передачи аргументов в функцию Python
  • Инструкция return
  • Анонимные функции (lambda-выражения)
  • Строки документации в функциях Python
  • Рекурсия
  • Замыкания в функциях Python
  • Перегрузка функций

Как передать словарь в функцию в Python?

Наиболее простой способ передать словарь в функцию в Python – это передать его как аргумент:

def my_function(my_dict): print(my_dict) my_dict = 'key1': 'value1', 'key2': 'value2'> my_function(my_dict) # => my_function('key3': 'value3'>) # => 

python: передача в функции параметров в виде словаря и добавление своих значений

подскажите как компактно, красиво и корректно передать в функцию параметры, содержащиеся в словаре + добавить свои параметры если над просто передать значения, то проблем нет:

data = < 'v1': 123, 'v3': 3.1415, 'v2': 'abc' >def func(v1, v2, v3): print(v1, v2, v3, sep='\n') func(**data) 

а как быть, если я хочу заменить одно значение другим или добавить новое? в JavaScript можно делать так:

а какой-нибудь короткий и красивый аналог в питоне есть?
Отслеживать
задан 18 мая 2023 в 7:16
37.3k 4 4 золотых знака 28 28 серебряных знаков 72 72 бронзовых знака

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Можете просто добавить именованный аргумент перед словарем **kwargs :

kw = def myfunc(**kwargs): print(kwargs) myfunc(**kw) # myfunc(c=3, **kw) # mydict = myfunc(**mydict, **kw) #

для замены значения можно так:

myfunc(**dict(kw, a=100)) #

Отслеживать
ответ дан 18 мая 2023 в 7:37
25.4k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков

да, вариант работает, причем не важно перед или после ставить новый параметр (вроде как проверил — оба варианта прошли), но вот как быть когда надо ЗАМЕНИТЬ параметр? т.е. в словаре уже есть такой параметр, условно **<'a': 1, 'b': 2>, b=2 — получается ошибка got multiple values for keyword argument , поэтому и привел способ из JS — там это происходит автоматически — если был старый параметр СЛЕВА, то он заменится на параметр, который указан СПРАВА, что очень удобно и компактно

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

Добрый день. Возникла проблема с kwargs в Python, искал в инете, но не нашел ответ. При вызове функции python выдает ошибку от том, что ждет 0 аргументов, а передан 1. Если передаю вместо имени словаря, сам словарь, то ошибок нет, но мне бы хотелось передавать именно имя словаря. Объясните в чём загвоздка. Заранее спасибо 🙂

people = < 'josh': 'man', 'jack': 'man', 'anna': 'woman' >def people(**kwargs): for name, sex in kwargs.items(): print(name + ' is a ' + sex) people(people)
  • Вопрос задан более трёх лет назад
  • 178 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *