Що таке args і kwargs в python

Що таке args і kwargs в python

. або як використовувати змінну кількість аргументів на Python

Щоб отримати відповідь на питання в заголовку, розділимо його на дві частини:
  1. Що таке args і kwargs? (Найбільш нетерплячі можуть підглянути відповідь =))
  2. Що позначають зірочки?
Почнемо з кінця. В Python функції як аргумент можна передавати не тільки окремі об'єкти, але також колекції.

Примітка: Якщо функції передається список, то його елементи повинні слідувати в строго обумовленому заздалегідь порядку, або, іншими словами, на своїх позиціях (інакше як ми дізнаємося, що собою представляє певний елемент списку?). Наприклад, якщо функція sign_up () чекає від нас список [name, age, gender]. то ми повинні строго дотримуватися цей порядок; ми не можемо викликати функцію sign_up (age, name, gender). Такі аргументи називаються неіменованого або позиційними. Якщо ж в якості аргументу функції передається словник, то порядок проходження може бути довільний, тому що елементи словника передаються з ключами, їх вже не переплутаєш. Такі аргументи називаються іменованих.

Продовжуючи приклад в примітці, позначимо наш список через змінну: А змінну передамо в функцію: При цьому, щоб функція сприйняла як аргумент не один об'єкт (а колекції також є об'єктами як і взагалі все в Python), а кілька, колекцію потрібно розпакувати. Якраз це і роблять зірочки. Записи такого типу (з однією або двома зірочками) в Python використовуються в двох випадках: при виклику (як ми зробили тільки що) і при визначенні функції.

* Args і ** kwargs при визначенні функції

Аргументи функції в Python, що позначаються * і ** при визначенні або виклику, називаються невизначену кількість позиційних або іменованих аргументів. Дуже дивно. Насправді це колекції - списки, кортежі або словники. Перші два передають позиційні аргументи, словники - іменовані аргументи. Щоб передати функції кілька аргументів у вигляді колекції, колекцію треба розпакувати. Це робиться однією або двома зірочками. Задамо функцію з одним формальним (позиційним) аргументом і невизначеною кількістю додаткових позиційних аргументів (тут, два). Функція з іменованими аргументами задається так:

Так що ж таке args і kwargs.

Тепер ви готові засвоїти всю правду про це :)
Імена args і kwargs по негласної угоди прийнято використовувати в документації Python. Насправді ніхто не забороняє брати будь-які інші валідниє імена змінних. Наприклад, для словників поряд c ** kwargs іноді використовують ** options.

Застосування * і ** при виконанні функції

Тепер подивимося як викликати функцію з позиційними аргументами (вже демонстрували вище). Тут вже менше сенсу в args і kwargs, буде краще вибрати більш інформативні імена (хоча в наступному прикладі ми не далеко в цьому просунулися =)): Аргументи можна передавати і так:
Наступний приклад показує виклик функції з іменованими аргументами:
Те ж саме з літералом:

висновок

Отже, якщо коротко підсумувати вищесказане, то зірочки в Python використовують в наступних випадках:

  1. При визначенні функції, якщо функція приймає невизначену кількість аргументів.
  2. При виконанні функції, коли їй потрібно передати кілька об'єктів у вигляді колекції. Зверніть увагу, не об'єкт колекції, а об'єкти, що містяться в колекції. Таким чином, позначення * args і ** kwargs розпаковують колекцію і передають її елементи в функцію.

Можливо, вам буде цікаво

Схожі статті