Функции

Поділитись

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

1
2
def имя_функции ([параметры]):
инструкции

Определение функции начинается с выражения def, которое состоит из имени функции, набора скобок с параметрами и двоеточия. Параметры в скобках необязательны. А со следующей строки идет блок инструкций, которые выполняет функция. Все инструкции функции имеют отступы от начала строки.

Например, определение простейшей функции:

1
2
def say_hello():
print("Hello")

Функция называется say_hello. Она не имеет параметров и содержит одну единственную инструкцию, которая выводит на консоль строку «Hello».

Для вызова функции указывается имя функции, после которого в скобках идет передача значений для всех ее параметров. Например:

1
2
3
4
5
6
def say_hello():
print("Hello") 

say_hello()
say_hello()
say_hello()

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

Hello
Hello
Hello

Теперь определим и используем функцию с параметрами:

1
2
3
4
5
6
def say_hello(name):print("Hello,",name) say_hello("Tom")say_hello("Bob")say_hello("Alice")

Функция принимает параметр name, и при вызове функции мы можем передать вместо параметра какой-либо значение:

Hello, Tom
Hello, Bob
Hello, Alice

Значения по умолчанию

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

1
2
3
4
5
def say_hello(name="Tom"):
print("Hello,", name) 


say_hello()
say_hello("Bob")

Здесь параметр name является необязательным. И если мы не передаем при вызове функции для него значение, то применяется значение по умолчанию, то есть строка «Tom».

Именованные параметры

При передаче значений функция сопоставляет их с параметрами в том порядке, в котором они передаются. Например, пусть есть следующая функция:

1
2
3
4
def display_info(name, age):
print("Name:", name, "\t", "Age:", age)

 display_info("Tom", 22)

При вызове функции первое значение «Tom» передается первому параметру — параметру name, второе значение — число 22 передается второму параметру — age. И так далее по порядку. Использование именованных параметров позволяет переопределить порядок передачи:

1
2
3
4
def display_info(name, age):
print("Name:", name, "\t", "Age:", age)

 display_info(age=22, name="Tom")

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

Неопределенное количество параметров

С помощью символа звездочки можно определить неопределенное количество параметров:

1
2
3
4
5
6
7
8
9
10
11
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, после которого указывается возвращаемое значение:

1
2
3
4
5
6
7
8
9
10
def exchange(usd_rate, money):
result = round(money/usd_rate, 2)

return result result
1 = exchange(60, 30000)
print(result1)result
2 = exchange(56, 30000)
print(result2)result
3 = exchange(65, 30000)
print(result3)

Поскольку функция возвращает значение, то мы можем присвоить это значение какой-либо переменной и затем использовать ее: result2 = exchange(56, 30000).

В Python функция может возвращать сразу несколько значений:

1
2
3
4
5
6
7
8
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, в которой потом уже вызываются другие функции:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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()

Поділитись