0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>* и **-операторы в<strong>вызовах</strong>функций<strong>синтаксически</strong>идентичны им в определениях, но выполняют<strong>обратное</strong>действие. Посмотрим на примере функции sum():</p>
1
<p>* и **-операторы в<strong>вызовах</strong>функций<strong>синтаксически</strong>идентичны им в определениях, но выполняют<strong>обратное</strong>действие. Посмотрим на примере функции sum():</p>
2
<p>Вызовем sum(), применив *-оператор к списку аргументов:</p>
2
<p>Вызовем sum(), применив *-оператор к списку аргументов:</p>
3
<p>Здесь, знакомый нам *-оператор, уже<strong>распаковывает</strong>список на аргументы. Количество полученных аргументов равно количеству элементов массива. По сути, код выше преобразуется в вызов:</p>
3
<p>Здесь, знакомый нам *-оператор, уже<strong>распаковывает</strong>список на аргументы. Количество полученных аргументов равно количеству элементов массива. По сути, код выше преобразуется в вызов:</p>
4
<p>Как и в случае с определением функций, *-оператор может использоваться совместно с позиционными аргументами:</p>
4
<p>Как и в случае с определением функций, *-оператор может использоваться совместно с позиционными аргументами:</p>
5
<p>В отличие от оператора упаковки в определении функций, оператор распаковки не обязательно должен быть последним, он может располагаться в любой позиции:</p>
5
<p>В отличие от оператора упаковки в определении функций, оператор распаковки не обязательно должен быть последним, он может располагаться в любой позиции:</p>
6
<p>Более того, может быть любое количество операторов распаковки и в любом порядке:</p>
6
<p>Более того, может быть любое количество операторов распаковки и в любом порядке:</p>
7
<h3>Распаковка именованных аргументов</h3>
7
<h3>Распаковка именованных аргументов</h3>
8
<p>По аналогии с оператором распаковки позиционных аргументов работает и оператор распаковки именованных - **-оператор.</p>
8
<p>По аналогии с оператором распаковки позиционных аргументов работает и оператор распаковки именованных - **-оператор.</p>
9
<p>Важно, что в примере выше, если мы забудем распаковать словарь, то получим ошибку. Ведь функция принимает не словарь, а любое количество именованных аргументов. Уже в вызове функции (func(**d)) **-оператор<strong>распаковывает</strong>переданный словарь в именованные аргументы вида a=42, b='python'. Затем оператор<strong>упаковки</strong>в определении функции (func(**kwargs)), собирает их в словарь kwargs, который мы и обрабатываем в функции.</p>
9
<p>Важно, что в примере выше, если мы забудем распаковать словарь, то получим ошибку. Ведь функция принимает не словарь, а любое количество именованных аргументов. Уже в вызове функции (func(**d)) **-оператор<strong>распаковывает</strong>переданный словарь в именованные аргументы вида a=42, b='python'. Затем оператор<strong>упаковки</strong>в определении функции (func(**kwargs)), собирает их в словарь kwargs, который мы и обрабатываем в функции.</p>
10
<p>Оператор ** упаковки-распаковки удобно использовать в функциях, принимающих неограниченное количество опций, например, функциях конфигурации:</p>
10
<p>Оператор ** упаковки-распаковки удобно использовать в функциях, принимающих неограниченное количество опций, например, функциях конфигурации:</p>
11
<h2>Итог</h2>
11
<h2>Итог</h2>
12
<p>Оба оператора упаковки и распаковки обозначаются символами * и **. Чтобы их не путать при работе с функциями, нужно следовать следующим принципам:</p>
12
<p>Оба оператора упаковки и распаковки обозначаются символами * и **. Чтобы их не путать при работе с функциями, нужно следовать следующим принципам:</p>
13
<ul><li>оператор упаковки используется при создании функций. Он позволяет собрать, упаковывать, остаточные аргументы функции</li>
13
<ul><li>оператор упаковки используется при создании функций. Он позволяет собрать, упаковывать, остаточные аргументы функции</li>
14
<li>оператор распаковки используется при вызове функций. Он извлекает элементы из коллекции и заполняет ими параметры функции при вызове</li>
14
<li>оператор распаковки используется при вызове функций. Он извлекает элементы из коллекции и заполняет ими параметры функции при вызове</li>
15
</ul><p>Сочетая эти операторы мы можем создавать функции работающие с любым числом аргументов.</p>
15
</ul><p>Сочетая эти операторы мы можем создавать функции работающие с любым числом аргументов.</p>