Функции
evgenij tkachenkoФункции представляют блок кода, который выполняет определенную задачу и который можно повторно использовать в других частях программы. Формальное определение функции:
def
имя_функции ([параметры]):
инструкции
Определение функции начинается с выражения def, которое состоит из имени функции, набора скобок с параметрами и двоеточия. Параметры в скобках необязательны. А со следующей строки идет блок инструкций, которые выполняет функция. Все инструкции функции имеют отступы от начала строки.
Например, определение простейшей функции:
def
say_hello():
print("Hello")
Функция называется say_hello
. Она не имеет параметров и содержит одну единственную инструкцию, которая выводит на консоль строку "Hello".
Для вызова функции указывается имя функции, после которого в скобках идет передача значений для всех ее параметров. Например:
def
say_hello():
print("Hello")
say_hello()
say_hello()
say_hello()
Здесь три раза подряд вызывается функция say_hello. В итоге мы получим следующий консольный вывод:
Hello Hello Hello
Теперь определим и используем функцию с параметрами:
def
say_hello(name):
print("Hello,",name)
say_hello("Tom")
say_hello("Bob")
say_hello("Alice")
Функция принимает параметр name, и при вызове функции мы можем передать вместо параметра какой-либо значение:
Hello, Tom Hello, Bob Hello, Alice
Значения по умолчанию
Некоторые параметры функции мы можем сделать необязательными, указав для них значения по умолчанию при определении функции. Например:
def
say_hello(name="Tom"):
print("Hello,", name)
say_hello()
say_hello("Bob")
Здесь параметр name является необязательным. И если мы не передаем при вызове функции для него значение, то применяется значение по умолчанию, то есть строка "Tom".
Именованные параметры
При передаче значений функция сопоставляет их с параметрами в том порядке, в котором они передаются. Например, пусть есть следующая функция:
def
display_info(name, age):
print("Name:", name, "\t", "Age:", age)
display_info("Tom", 22)
При вызове функции первое значение "Tom" передается первому параметру - параметру name, второе значение - число 22 передается второму параметру - age. И так далее по порядку. Использование именованных параметров позволяет переопределить порядок передачи:
def
display_info(name, age):
print("Name:", name, "\t", "Age:", age)
display_info(age=22, name="Tom")
Именованные параметры предполагают указание имени параметра с присвоением ему значения при вызове функции.
Неопределенное количество параметров
С помощью символа звездочки можно определить неопределенное количество параметров:
def
sum(*params):
result =
0
for
n in
params:
result +=
n
return
result
sumOfNumbers1 =
sum(1, 2, 3, 4, 5) # 15
sumOfNumbers2 =
sum(3, 4, 5, 6) # 18
print(sumOfNumbers1)
print(sumOfNumbers2)
В данном случае функция sum принимает один параметр - *params
, но звездочка перед названием параметра указывает, что фактически на место этого параметра мы можем передать неопределенное количество значений или набор значений. В самой функции с помощью цикла for можно пройтись по этому набору и произвести с переданными значениями различные действия. Например, в данном случае возвращается сумма чисел.
Возвращение результата
Функция может возвращать результат. Для этого в функции используется оператор return, после которого указывается возвращаемое значение:
def
exchange(usd_rate, money):
result =
round(money/usd_rate, 2)
return
result
result1 =
exchange(60, 30000)
print(result1)
result2 =
exchange(56, 30000)
print(result2)
result3 =
exchange(65, 30000)
print(result3)
Поскольку функция возвращает значение, то мы можем присвоить это значение какой-либо переменной и затем использовать ее: result2 = exchange(56, 30000)
.
В Python функция может возвращать сразу несколько значений:
def
create_default_user():
name =
"Tom"
age =
33
return
name, age
user_name, user_age =
create_default_user()
print("Name:", user_name, "\t Age:", user_age)
Здесь функция create_default_user возвращает два значения: name и age. При вызове функции эти значения по порядку присваиваются переменным user_name и user_age, и мы их можем использовать.
Функция main
В программе может быть определено множество функций. И чтобы всех их упорядочить, хорошей практикой считается добавление специальной функции main
, в которой потом уже вызываются другие функции:
def
main():
say_hello("Tom")
usd_rate =
56
money =
30000
result =
exchange(usd_rate, money)
print("К выдаче", result, "долларов")
def
say_hello(name):
print("Hello,", name)
def
exchange(usd_rate, money):
result =
round(money/usd_rate, 2)
return
result
# Вызов функции main
main()