Параметры и аргументы функций#

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

Как правило, функция должна выполнять какие-то действия с входящими значениями и на выходе выдавать результат.

При работе с функциями важно различать:

  • параметры - это переменные, которые используются при создании функции.

  • аргументы - это фактические значения (данные), которые передаются функции при вызове.

Параметры бывают обязательные и необязательные.

Обязательные:

def f(a, b):
    pass

Необязательные (со значением по умолчанию):

def f(a=None):
    pass

В этом случае a - передавать необязательно.

Аргументы бывают позиционные и ключевые.

def summ(a, b):
    return a + b

Позиционные:

summ(1, 2)

Ключевые:

summ(a=1, b=2)

Независимо от того как параметры созданы, при вызове функции им можно передавать значения и как ключевые и как позиционные аргументы. При этом обязательные параметры надо передать в любом случае, любым способом (позиционными или ключевыми), а необязательные можно передавать, можно нет. Если передавать, то тоже любым способом.

Подробнее типы параметров и аргументов будут рассматриваться позже.

Для того, чтобы функция могла принимать входящие значения, ее нужно создать с параметрами (файл func_check_passwd.py):

In [1]: def check_passwd(username, password):
   ...:     if len(password) < 8:
   ...:         print('Пароль слишком короткий')
   ...:         return False
   ...:     elif username in password:
   ...:         print('Пароль содержит имя пользователя')
   ...:         return False
   ...:     else:
   ...:         print(f'Пароль для пользователя {username} прошел все проверки')
   ...:         return True
   ...:

В данном случае, у функции два параметра: username и password.

Функция проверяет пароль и возвращает False, если проверки не прошли и True если пароль прошел проверки:

In [2]: check_passwd('nata', '12345')
Пароль слишком короткий
Out[2]: False

In [3]: check_passwd('nata', '12345lsdkjflskfdjsnata')
Пароль содержит имя пользователя
Out[3]: False

In [4]: check_passwd('nata', '12345lsdkjflskfdjs')
Пароль для пользователя nata прошел все проверки
Out[4]: True

При таком определении функции надо обязательно передать оба аргумента. Если передать только один аргумент, возникнет ошибка:

In [5]: check_passwd('nata')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-e07773bb4cc8> in <module>
----> 1 check_passwd('nata')

TypeError: check_passwd() missing 1 required positional argument: 'password'

Аналогично, возникнет ошибка, если передать три и больше аргументов.