Что делает '**', означают в выражении 'dict (d1, ** d2)'?

Я заинтригован следующим выражением Python:

d3 = dict(d1, **d2)

Задача состоит в том, чтобы объединить 2 словаря в третий, и вышеупомянутое выражение выполняет задачу очень хорошо. Я интересуюсь ** оператор и что точно является им делающий к выражению. Я думал, что ** был оператор питания и не видел, что он использовал в контексте выше все же.

Полный отрывок кода - это:

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)
>>> print d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
43
задан Mechanical snail 23 March 2012 в 09:08
поделиться

6 ответов

** в списках аргументов имеет особое значение, как описано в раздел 4.7 руководства . Словарь (или подобный словарю) объект, переданный с помощью ** kwargs , раскрывается в аргументы ключевого слова вызываемого объекта, подобно тому как * args раскрывается в отдельные позиционные аргументы.

43
ответ дан 26 November 2019 в 22:58
поделиться

вы получили ответ оператора **. вот еще один способ добавить словари

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3=d1.copy()
>>> d3.update(d2)
>>> d3
{'a': 1, 'c': 3, 'b': 2, 'd': 4}
1
ответ дан 26 November 2019 в 22:58
поделиться

В Python любая функция может принимать несколько аргументов с *;
или несколькими аргументами ключевого слова с **.

Пример принимающей стороны:

>>> def fn(**kwargs):
...   for kwarg in kwargs:
...     print kwarg
... 
>>> fn(a=1,b=2,c=3)
a
c
b

Пример вызывающей стороны (спасибо Томасу):

>>> mydict = dict(a=1,b=2,c=3)
>>> fn(**mydict)
a
c
b
9
ответ дан 26 November 2019 в 22:58
поделиться

Оператор ** превращает словарь в параметры ключевых слов:

>>> d1 = {'a': 1, 'b': 2}
>>> d2 = {'c': 3, 'd': 4}
>>> d3 = dict(d1, **d2)

Становится:

>>> d3 = dict(d1, c=3, d=4)
12
ответ дан 26 November 2019 в 22:58
поделиться

Этот оператор используется для распаковки списка аргументов: http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists

1
ответ дан 26 November 2019 в 22:58
поделиться

Нет, порядок не имеет значения.

Почти все RDBMS (такие как MS Access, MySQL, SQL Server, ORACLE и т.д.) используют оптимизатор на основе затрат на основе статистики столбцов. В большинстве ситуаций оптимизатор выберет правильный план. В приведенном примере заказ не имеет значения (при условии актуализации статистики).

Чтобы решить, какую стратегию запроса использовать, оптимизатор Jet Engine использует статистика. Ниже перечислены следующие факторы: некоторые из факторов, которые они статистика основана на:

  • Количество записей в таблице
  • Количество страниц данных в таблице
  • Расположение таблицы
  • Присутствуют ли индексы
  • Насколько уникальны индексы

Примечание : Вы не можете просматривать схемы оптимизации ядра базы данных Jet, и вы не может указать, как оптимизировать запрос. Тем не менее, вы можете использовать Documenter базы данных для определения присутствуют ли индексы и каким образом уникальный индекс.

На основе этих статистических данных Затем оптимизатор выбирает лучший внутренняя стратегия запроса для обработки с определенным запросом.

Статистика обновляется всякий раз, когда запрос компилируется. Запрос помечен для компиляции при сохранении любого изменения в запросе (или его базовые таблицы) и когда база данных уплотнена. Если запрос помечен для компиляции, компиляция и происходит обновление статистики при следующем выполнении запроса. Компиляция обычно занимает от одного секунды до четырех секунд.

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

Ссылка .

Может представлять интерес: ACC: как оптимизировать запросы в Microsoft Access 2,0, Microsoft Access 95 и Microsoft Access 97

Часто задаваемые вопросы по производительности Microsoft Access Тони Тьюза .

-121--1340797-

Не очень много информации о фактических параметрах по умолчанию на веб-сайтах Майкрософт, однако Geoff Chappell, похоже, провел некоторые исследования по этой теме. Ссылка:

http://www.geoffchappell.com/viewer.htm?doc = studies/msvc/cl/cl/initial.htm & tx = 27

Поскольку мы все знаем, что говорится в документации и что на самом деле делает программное обеспечение, это две разные вещи.

Чтобы ответить на вопрос, вы можете увидеть, какие опции cl передаются модулям компилятора c1xx.dll и c2.dll, передав опцию/Bd в cl:

cl /Bd helloworld.cpp

Чтобы увидеть переменные среды, которые компилятор и компоновщик использует тип:

cl /Be helloworld.cpp
-121--4029008-

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

3
ответ дан 26 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: