Разница между аргументами и параметрами функции Python

Когда вы начнете работать с функциями в Python, вы, вероятно, спросите себя, в чем разница между параметрами и аргументами.

Это очень распространенный вопрос, и он часто сбивает с толку новичков в программировании.

В Python, когда вы определяете функцию, вы указываете параметры в той же строке, что и ключевое слово def, в круглых скобках. Это своего рода заполнители для значений (аргументов), с которыми функция работает при вызове. Другими словами, аргументы передаются при вызове функции и присваивают значения параметрам функции.

В качестве примера функции возьмем следующий код:

def calculate_sum(a, b):
    result = a+b
    return result

number1 = 10
number2 = 15
print("The sum of the two numbers is "+str(calculate_sum(number1, number2)))

Какие из них являются параметрами, а какие аргументами?

  • Параметры a и b. Они присутствуют в определении функции в той же строке, что и ключевое слово def. Это входные значения, которые ожидает функция.
  • Аргументы: number1 и number2. Вы передаете их в функцию calculation_sum() при ее вызове.
  • Значение аргумента номер1 присваивается параметру a, а значение аргумента номер2 присваивается параметру b.

Другими словами, аргументы предоставляют конкретные значения параметрам функции. Это позволяет функции выполнять свое предназначение с предоставленными данными.

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

Количество параметров и аргументов функции

При использовании позиционных аргументов количество аргументов, передаваемых при вызове функции, должно соответствовать количеству параметров в определении функции.

Вот что произойдет, если количество аргументов и параметров не совпадают.

Передача большего количества позиционных аргументов, чем параметров

def calculate_sum(a, b):
    result = a+b
    return result

number1 = 10
number2 = 15
number3 = 20
calculate_sum(number1, number2, number3)

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

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
TypeError: calculate_sum() takes 2 positional arguments but 3 were given

Передача меньшего количества позиционных аргументов, чем параметров

calculate_sum(number1)

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

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
TypeError: calculate_sum() missing 1 required positional argument: 'b'

Теперь вы знаете, как устранить эту ошибку TypeError, если вы видите ее при вызове функции.

Изменение порядка аргументов, передаваемых в функцию

Порядок аргументов в вызове функции может изменить вывод, возвращаемый функцией.

Например, возьмем функцию ниже:

def calculate_sum(a, b):
    result = 2 * a + b
    return result

number1 = 10
number2 = 15

Когда вы вызываете функцию следующим образом, значение number1 присваивается параметру a, а значение number2 присваивается параметру b.

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

>>> calculate_sum(number1, number2)
35

Если вы измените порядок аргументов, номер значения 2 будет присвоен a, а номер значения 1b.

>>> calculate_sum(number2, number1)
40

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

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

Синтаксис, который вы используете при передаче аргумента ключевого слова, следующий:

имя_параметра = значение_аргумента

Давайте посмотрим, как это работает на предыдущем примере кода:

>>> calculate_sum(a=number1, b=number2)
35
>>> calculate_sum(b=number2, a=number1)
35

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

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

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