Рубрики
Без рубрики

Аргументы по умолчанию в функциях Python

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

Автор оригинала: Usman Malik.

Функции в Python используются для реализации логики, которую вы хотите многократно выполнять в разных местах вашего кода. Вы можете передавать данные этим функциям с помощью аргументов функций. В дополнение к передаче аргументов функциям через вызов функции, вы также можете установить значения аргументов по умолчанию в функциях Python. Эти значения по умолчанию присваиваются аргументам функции, если вы явно не передаете значение параметра данному аргументу. Параметры-это значения, фактически передаваемые в аргументы функции.

В этой статье вы увидите, как использовать аргументы по умолчанию в функциях Python. Но сначала мы увидим, как определить функцию в Python и как явно передавать значения аргументам функции.

Функция без аргументов

Давайте определим очень простую функцию Python без каких-либо аргументов:

def my_function():
    print("This is a function without arguments")

Приведенный выше скрипт определяет функцию my_function , которая не принимает никаких аргументов и просто выводит строку.

Следующий сценарий показывает, как вы на самом деле вызываете функцию my_function() :

my_function()

В выводе вы должны увидеть простой оператор, выведенный на экран функцией my_function() :

This is a function without arguments

Функция с явными аргументами

Давайте теперь определим простую функцию Python, где мы должны передать несколько значений для аргументов функции. Если вы не укажете значения для всех аргументов функции, то увидите ошибку.

Вот функция, которую мы будем использовать в качестве примера:

def func_args(integer1, integer2):
    result = integer1 + integer2
    return result

В приведенном выше коде мы создаем функцию func_args () с двумя аргументами integer1 и integer2 . Функция добавляет значения, переданные в двух аргументах, и возвращает результат вызывающей функции.

Давайте попробуем вызвать приведенную выше функцию с двумя аргументами:

result = func_args(10, 20)
print(result)

Приведенный выше скрипт вызывает метод func_args() с двумя значениями параметров, то есть 10 и 20. На выходе вы должны увидеть сумму этих двух значений, то есть 30.

Теперь попробуем вызвать метод func_args() без передачи значений аргументов:

result = func_args()
print(result)

В выходных данных вы должны увидеть следующую ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
----> 1 result = func_args()
      2 print(result)

TypeError: func_args() missing 2 required positional arguments: 'integer1' and 'integer2'

Ошибка вполне понятна, в вызове функции func_args() отсутствуют 2 необходимых позиционных аргумента, integer1 и integer2 . Ошибка в основном говорит нам, что нам нужно передать значения для аргументов integer1 и integer2 через вызов функции.

Давайте теперь передадим значение для одного из аргументов и посмотрим, что произойдет:

result = func_args(10)
print(result)

Теперь в выводе вы снова должны увидеть следующую ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
----> 1 result = func_args(10)
      2 print(result)

TypeError: func_args() missing 1 required positional argument: 'integer2'

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

Что делать, если вы хотите, чтобы ваша функция выполнялась со значениями аргументов в вызове функции или без них? Именно здесь вступают в игру аргументы по умолчанию в функциях Python.

Функция с аргументами по умолчанию

Аргументы по умолчанию в функциях Python – это те аргументы, которые принимают значения по умолчанию, если никакие явные значения не передаются этим аргументам из вызова функции. Давайте определим функцию с одним аргументом по умолчанию.

def find_square(integer1=2):
    result = integer1 * integer1
    return result

Приведенный выше скрипт определяет функцию find_square() с одним аргументом по умолчанию, т. е. integer 1 . Значение по умолчанию для аргумента integer1 равно 2. Если вы вызовете метод find_square() со значением для аргумента integer1 , функция find_square() вернет квадрат этого значения.

В противном случае, если вы не передадите никакого значения для аргумента integer1 функции find_square () , вы увидите, что значение по умолчанию, то есть 2 , будет присвоено integer1 , и функция вернет квадрат 2, то есть 4.

Сначала вызовем метод find_square() со значением аргумента 10:

result = find_square(10)
print(result)

Выход:

100

При выполнении приведенного выше скрипта значение 10 перезаписывает значение по умолчанию 2 для аргумента integer 1 функции find_square () , и функция возвращает 100, что является квадратом 10.

Теперь мы вызовем функцию find_square() без какого-либо значения для аргумента аргумент 1 . В этом случае вы увидите, что 4 будет возвращено функцией find_square () , так как при отсутствии значения для функции find_square() значение по умолчанию 2 будет использоваться в качестве значения для функции find_square () , как показано ниже:

result = find_square()
print(result)

Выход:

4

Функция Python также может иметь несколько аргументов по умолчанию. Например, в следующем скрипте функция добавляет целые числа, переданные в аргументы. Если ни одно из целочисленных значений не передается функции, аргументы по умолчанию будут принимать значения 2 и 4 соответственно, как показано ниже:

def add_ints(integer1=2, integer2=4):
    result = integer1 + integer2
    return result

Давайте сначала вызовем функцию add_ins() без каких-либо параметров:

result = add_ints()
print(result)

Выход:

6

Поскольку мы не передали никаких значений для аргументов функции, значения аргументов по умолчанию, то есть 2 и 4, были добавлены вместе.

Теперь давайте передадим два наших собственных значения функции add_ins() :

result = add_ints(4, 8)
print(result)

Выход:

12

Как и ожидалось, 4 и 8 были сложены вместе, чтобы вернуть 12.

Функция Python может иметь как обычные (явные), так и стандартные аргументы одновременно. Давайте создадим функцию take_power() . Первый аргумент функции является нормальным аргументом, в то время как второй аргумент является аргументом по умолчанию со значением 2. Функция возвращает результат значения в первом аргументе, возведенного в степень значения во втором аргументе.

def take_power(integer1, integer2=2):
    result = 1
    for i in range(integer2):
        result = result * integer1

    return result

Давайте сначала передадим только один аргумент:

result = take_power(3)
print(result)

Выход:

9

В приведенном выше скрипте 3 было передано в качестве значения аргументу integer 1 функции take_power () . Для аргумента по умолчанию integer 2 не было предоставлено никакого значения . Следовательно, значение по умолчанию 2 будет использоваться для получения мощности 3, и вы увидите 9 на выходе.

Теперь передадим два значения функции take_power () .

result = take_power(3, 4)
print(result)

На выходе вы увидите 3, возведенные в четвертую степень, то есть 81.

Важно отметить, что за параметрами с аргументами по умолчанию не могут следовать параметры без аргумента по умолчанию . Возьмем, к примеру, следующую функцию:

def take_power(integer1=2, integer2):
    result = 1
    for i in range(integer2):
        result = result * integer1

    return result

Попытка вызвать эту функцию приведет к ошибке, так как первый аргумент имеет значение по умолчанию, а второй-нет:

result = take_power(3, 4)
print(result)

Выполнение этого кода приводит к следующей ошибке:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in 
----> 1 def take_power(integer1=3, integer2):
      2     result = 1

SyntaxError: non-default argument follows default argument