TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7454 3.49K
Python для собеседований. Вопрос: В чём разница между *args и **kwargs?

Когда мы пишем функции в Python, чаще всего знаем, сколько аргументов они будут принимать. Но иногда это неизвестно заранее. Именно для таких случаев существуют *args и **kwargs.

Чтобы их понять, сначала разберёмся с двумя базовыми типами аргументов.

(a) Позиционные аргументы (Positional Arguments)

Это аргументы, которые передаются в функцию в определённом порядке:

def greet(name, age):
print(f"Hello {name}, you are {age} years old")

greet('Shiva Shankar', 30)
greet('Narayanan', 32)


первый аргумент → name
второй аргумент → age

Если перепутать порядок:

greet(31, 'Lakshmi')


Python всё равно выполнит вызов, но:
name = 31
age = 'Lakshmi', что логически неверно.

(b) Именованные аргументы (Keyword Arguments)

Здесь мы явно указываем, какому параметру что соответствует. Порядок уже не важен:

greet(name='Ganesh', age=25)
greet(age=21, name='Karthikeya')


Так код читается лучше и снижает риск ошибок.

🔛 Различия

*args позволяет функции принимать любое количество позиционных аргументов. Внутри функции они собираются в кортеж:

def calculate_total(*prices):
total = 0
for i, price in enumerate(prices, 1):
print(f"Item {i}: {price}")
total += price
print(f"Total: {round(total, 2)}")

calculate_total(10.5, 20, 5.75)


prices → это кортеж: (10.5, 20, 5.75)

Используется, когда количество входных значений заранее неизвестно.

**kwargs позволяет принимать любое количество именованных аргументов. Внутри функции они собираются в словарь:

def show_order(**kwargs):
total = 0
for i, (item, price) in enumerate(kwargs.items(), 1):
print(f"{i}. {item}: {price}")
total += price
print(f"Total: {round(total, 2)}")

show_order(apple=2.5, milk=1.8, bread=2.2)


kwargs:

{'apple': 2.5, 'milk': 1.8, 'bread': 2.2}


Ключи — названия, значения — данные.

🔛 Использование вместе: *args + **kwargs


def shopping_cart(*items, **prices):
print("Items:")
for i, item in enumerate(items, 1):
print(f"{i}. {item}")

print("\nPrices:")
total = 0
for i, (item, price) in enumerate(prices.items(), 1):
print(f"{i}. {item}: {price}")
total += price

print(f"\nTotal bill: {round(total, 2)}")

shopping_cart(
"Shoes", "T-shirt",
Shoes=50, Tshirt=20
)


items → позиционные данные (что купили)
prices → именованные данные (цены)

📍 Навигация: Вакансии • Задачи • Собесы

🐸 Библиотека питониста

#буст
  • 👍 16
  • ❤ 9
  • 🔥 3
More from @pyproglib
  1. Oct 3, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  2. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  3. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  4. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  5. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  6. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →