Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Поєднання Позиційних та Іменованих Довільних Аргументів | Довільні аргументи
Підручник з функцій Python
Секція 3. Розділ 3
single

single

Поєднання Позиційних та Іменованих Довільних Аргументів

Свайпніть щоб показати меню

Розгляд функції, яка обчислює загальну вартість декількох товарів, дозволяючи передавати будь-яку кількість цін і додаткові ключові параметри, такі як знижки або податки.

12345678910111213141516171819202122232425
def calculate_total_cost(*prices, **settings): subtotal = sum(prices) discount = settings.get('discount', 0) tax = settings.get('tax', 0) discount_amount = subtotal * (discount / 100) taxed_amount = (subtotal - discount_amount) * (1 + tax / 100) print(f'Subtotal: ${subtotal:.2f}') if discount > 0: print(f'Discount: {discount}% (-${discount_amount:.2f})') else: print('No discount applied.') if tax > 0: print(f'Tax: {tax}% (+${taxed_amount - (subtotal - discount_amount):.2f})') print(f'Final total: ${taxed_amount:.2f}') print() # Examples of using the function calculate_total_cost(1000, 250, 50) calculate_total_cost(1200, 800, discount=10) calculate_total_cost(500, 750, 250, discount=5, tax=8)

У наведеному вище коді зверніть увагу на рядок settings.get('discount', 0). Оскільки settings збирає іменовані аргументи у стандартний словник Python, для безпечного отримання значень використовується метод словника .get().

Зазвичай, якщо ви намагаєтеся отримати значення за ключем, якого немає у словнику, за допомогою квадратних дужок (наприклад, settings['discount']), Python згенерує помилку KeyError. Метод .get() запобігає цьому, дозволяючи вказати значення за замовчуванням.

Синтаксис виглядає так:

dictionary.get(key, default_value)

key: назва параметра, який шукається (наприклад, 'discount' або 'tax').
default_value: значення, яке повертається, якщо цей ключ не був переданий у функцію.

Правила комбінування довільних аргументів

Довільні позиційні аргументи (*args)

*args збирає всі додаткові позиційні аргументи у кортеж. У цьому прикладі функція може приймати будь-яку кількість цін товарів без необхідності явно їх визначати.

Наприклад:

calculate_total_cost(500, 250, 100)

Тут *prices стає (500, 250, 100).

Довільні іменовані аргументи (**kwargs)

**kwargs збирає всі іменовані (ключові) аргументи у словник. Це дозволяє функції приймати додаткові іменовані налаштування, такі як discount або tax, навіть якщо вони не були визначені заздалегідь.

Наприклад:

calculate_total_cost(1000, 500, discount=10, tax=5)

Тут **settings стає {'discount': 10, 'tax': 5}.

Комбінування обох

Можна використовувати і *args, і **kwargs в одній функції для досягнення максимальної гнучкості — це дозволяє обробляти будь-яку кількість позиційних значень і будь-яку комбінацію іменованих налаштувань.

Note
Примітка

Завжди розміщуйте *args перед **kwargs у сигнатурі функції – зміна порядку призведе до SyntaxError.

Завдання

Проведіть, щоб почати кодувати

Реалізувати функцію generate_report, яка приймає будь-яку кількість числових оцінок і додаткові налаштування у вигляді ключових аргументів.

  1. Використати *args для збору оцінок (назвати параметр scores) і **kwargs для збору додаткових налаштувань.

  2. Обчислити середнє значення всіх наданих оцінок, підсумувавши всі значення в scores і поділивши на їхню кількість:
    Average=sum(scores)len(scores)\text{Average} = \frac{\text{sum}(scores)}{\text{len}(scores)}

  3. Якщо у 'label' присутній ключ **kwargs, використати його значення як заголовок звіту; інакше використати 'Report'.

  4. Якщо у **kwargs присутній ключ 'passing_score', перевірити, чи середнє значення відповідає або перевищує його:

    • Якщо так, додати до звіту 'Status: Pass'.
    • Якщо ні, додати 'Status: Fail'.
  5. Повернути результат у вигляді відформатованого рядка: '{label} | Average: {avg:.2f} | {status}'. Якщо 'passing_score' не вказано, опустити частину статусу: '{label} | Average: {avg:.2f}'.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt