Параметры и аргументы функций#
Цель создания функции, как правило, заключается в том, чтобы вынести кусок кода, который выполняет определенную задачу, в отдельный объект. Это позволяет использовать этот кусок кода многократно, не создавая его заново в программе.
Как правило, функция должна выполнять какие-то действия с входящими значениями и на выходе выдавать результат.
При работе с функциями важно различать:
параметры - это переменные, которые используются при создании функции.
аргументы - это фактические значения (данные), которые передаются функции при вызове.
Параметры бывают обязательные и необязательные.
Обязательные:
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'
Аналогично, возникнет ошибка, если передать три и больше аргументов.