Python не может использовать ** вне определения функции

#python #keyword-argument

#python #ключевое слово-аргумент

Вопрос:

Отказ от ответственности: я новичок в Python.

Если вы читаете эту статью, в ней указано ** , что она может распаковывать словари. Я пробовал это.

  1. my_dict = {"key1": 1, "key2": {"inner_key": 3} }
  2. unpacked_dict = **my_dict

ВОЗВРАТ: SyntaxError: invalid syntax

Чего мне не хватает? Я знаю ** , что используется в основном с **kwargs , моя проблема, которая ** может использоваться только в определении функции?

Комментарии:

1. Чего вы ожидали unpacked_dict ?

2. Цель ** состоит в том, чтобы перевести dict в kwargs функции, что имеет смысл только в контексте вызова функции.

3. Это неверно в Python 3.5 : python.org/dev/peps/pep-0448

Ответ №1:

Вы можете использовать его для распаковки в другие словари. Это не работает так, как я предполагаю, что вы пытаетесь это сделать, что берется из внутренних словарей значений и делает их частью одного уровня. Из статьи, на которую вы ссылались:

Например, мы можем скопировать словарь, добавив в него новое значение:

 >>> date_info = {'year': '2020', 'month': '01', 'day': '7'}
>>> event_info = {**date_info, 'group': "Python Meetup"}
>>> event_info
{'year': '2020', 'month': '01', 'day': '7', 'group': 'Python Meetup'}
 

Или копировать / объединять словари при переопределении определенных значений:

 >>> event_info = {'year': '2020', 'month': '01', 'day': '7', 'group': 'Python Meetup'}
>>> new_info = {**event_info, 'day': "14"}
>>> new_info
{'year': '2020', 'month': '01', 'day': '14', 'group': 'Python Meetup'}
 

Это было добавлено с версии Python 3.5 , дополнительная информация приведена в PEP 448.

Комментарии:

1. Спасибо @GiraffeMan91 за полный ответ, объясняющий обоснование и приводящий пример. Теперь это имеет смысл. Приветствия!