Ключевые аргументы в Python с примерами
В этом руководстве вы узнаете об аргументах ключевых слов Python и о том, как их использовать, чтобы сделать вызовы функций более очевидными.
Начнем с простой функции, которая вычисляет чистую цену на основе продажной цены и скидки:
def get_net_price(price, discount): return price *(1-discount)
Функция get_net_price() имеет два параметра: price и discount.
Ниже показано, как вызвать функцию get_net_price() для расчета чистой цены на основе цены 100 и скидки 10 %:
net_price = get_net_price(100, 0.1) print(net_price)
Выход:
90.0
При вызове функции get_net_price(100, 0.1) мы передаем каждый аргумент как позиционный аргумент. Другими словами, сначала мы передаем аргумент price, а затем аргумент discount.
Однако вызов функции get_net_price(100, 0.1) имеет проблемы с читаемостью. Потому что, глядя только на вызов этой функции, вы не знаете, какой аргумент является ценой, а какой — скидкой.
Кроме того, когда вы вызываете функцию get_net_price(), вам необходимо знать позицию каждого аргумента.
Если вы этого не сделаете, функция неправильно рассчитает net_price. Например:
net_price = get_net_price(0.1, 100) print(net_price)
Выход:
-9.9
Чтобы улучшить читаемость, Python вводит аргументы ключевого слова.
Ниже показан синтаксис аргумента ключевого слова:
fn(parameter1=value1,parameter2=value2)
Используя синтаксис аргумента ключевого слова, вам не нужно указывать аргументы в том же порядке, в котором они определены в функции.
Следовательно, вы можете вызвать функцию, поменяв местами аргументы следующим образом:
fn(parameter2=value2,parameter1=value1)
Ниже показано, как использовать синтаксис аргумента ключевого слова для вызова функции get_net_price():
net_price = get_net_price(price=100, discount=0.1)
Или:
net_price = get_net_price(discount=0.1, price=100)
Оба они возвращают один и тот же результат. Когда вы используете аргументы-ключевые слова, имеют значение их имена, а не их позиции.
Обратите внимание, что вы можете вызвать функцию, смешав позиционные и ключевые аргументы. Например:
net_price = get_net_price(100, discount=0.1)
Аргументы ключевого слова и параметры по умолчанию
Предположим, что у вас есть следующая функция get_net_price(), которая вычисляет чистую цену на основе цены продажи, налога и скидки.
def get_net_price(price, tax=0.07, discount=0.05): return price *(1 + tax - discount)
В функции get_net_price() параметры tax и discount имеют значения по умолчанию 7% и 5% соответственно.
Следующий код вызывает функцию get_net_price() и использует значения по умолчанию для параметров налога и скидки:
net_price = get_net_price(100) print(net_price)
Выход:
102.0
Предположим, вы хотите использовать значение по умолчанию для параметра налога, но не скидки. Следующий вызов функции работает неправильно.
net_price = get_net_price(100, 0.06)
…потому что Python присвоит 100 цене и 0,1 налогу, а не скидке.
Чтобы это исправить, вы должны использовать аргументы ключевых слов:
net_price = get_net_price(price=100, discount=0.06) print(net_price)
Выход:
101.0
Или вы можете смешать позиционные и ключевые аргументы:
net_price = get_net_price(100, discount=0.06) print(net_price)
Выход:
101.0
Требования к аргументам ключевого слова Python
После того как вы используете аргумент ключевого слова, вам необходимо использовать аргументы ключевого слова для остальных параметров.
Следующий пример приведет к ошибке, поскольку после аргумента ключевого слова используется позиционный аргумент:
net_price = get_net_price(100, tax=0.08, 0.06)
Ошибка:
SyntaxError: positional argument follows keyword argument
Чтобы исправить это, вам нужно использовать аргумент ключевого слова для третьего аргумента следующим образом:
net_price = get_net_price(100, tax=0.08, discount=0.06) print(net_price)