Поєднання Позиційних та Іменованих Довільних Аргументів
Розгляд функції, яка обчислює загальну вартість декількох товарів, дозволяючи передавати будь-яку кількість цін і додаткові ключові параметри, такі як знижки або податки.
12345678910111213141516171819202122232425def 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 в одній функції для досягнення максимальної гнучкості — це дозволяє обробляти будь-яку кількість позиційних значень і будь-яку комбінацію іменованих налаштувань.
Завжди розміщуйте *args перед **kwargs у сигнатурі функції – зміна порядку призведе до SyntaxError.
Дякуємо за ваш відгук!
single
Поєднання Позиційних та Іменованих Довільних Аргументів
Свайпніть щоб показати меню
Розгляд функції, яка обчислює загальну вартість декількох товарів, дозволяючи передавати будь-яку кількість цін і додаткові ключові параметри, такі як знижки або податки.
12345678910111213141516171819202122232425def 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 в одній функції для досягнення максимальної гнучкості — це дозволяє обробляти будь-яку кількість позиційних значень і будь-яку комбінацію іменованих налаштувань.
Завжди розміщуйте *args перед **kwargs у сигнатурі функції – зміна порядку призведе до SyntaxError.
Проведіть, щоб почати кодувати
Реалізувати функцію generate_report, яка приймає будь-яку кількість числових оцінок і додаткові налаштування у вигляді ключових аргументів.
-
Використати
*argsдля збору оцінок (назвати параметрscores) і**kwargsдля збору додаткових налаштувань. -
Обчислити середнє значення всіх наданих оцінок, підсумувавши всі значення в scores і поділивши на їхню кількість:
Average=len(scores)sum(scores) -
Якщо у
'label'присутній ключ**kwargs, використати його значення як заголовок звіту; інакше використати'Report'. -
Якщо у
**kwargsприсутній ключ'passing_score', перевірити, чи середнє значення відповідає або перевищує його:- Якщо так, додати до звіту
'Status: Pass'. - Якщо ні, додати
'Status: Fail'.
- Якщо так, додати до звіту
-
Повернути результат у вигляді відформатованого рядка:
'{label} | Average: {avg:.2f} | {status}'. Якщо'passing_score'не вказано, опустити частину статусу:'{label} | Average: {avg:.2f}'.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат