Функции
Содержание
- Что такое функции
- Как объявить функцию
- Зачем выносить код в функции
- Параметры и аргументы
- Возвращаемое значение
return - Область видимости
- Практика
- Дополнительные задания для закрепления
Что такое функции
Функция - это именованный блок кода, который можно вызывать столько раз, сколько нужно. Она помогает не копировать одинаковые действия по всей программе, а хранить их в одном месте.
С повторяющимся кодом мы уже боролись циклами в 02.07 - Циклы — функции решают ту же проблему на уровне структуры программы.
Функцию удобно воспринимать как небольшую подпрограмму: она может принять входные данные, выполнить определенную работу и вернуть результат.
def show_status():
print("Проверка завершена")
show_status()
show_status()Здесь show_status() можно вызвать много раз, и каждый раз выполнится код внутри функции.
Как объявить функцию
В Python функция создается с помощью ключевого слова def.
def имя_функции(параметры):
# тело функции
# код с отступомРазберем элементы:
defсообщает Python, что дальше начинается определение функции;имя_функции- имя, по которому функцию будут вызывать;- круглые скобки содержат параметры, если функции нужны входные данные;
- двоеточие открывает блок кода;
- тело функции пишется с отступом, обычно в 4 пробела.
Имена функций в Python обычно пишут в snake_case: calculate_total, print_message, get_user_name.
-
Мини-повторение правил именования
Имя функции может содержать буквы, цифры и нижнее подчеркивание, но не должно начинаться с цифры. Регистр важен:
get_dataиGetData- разные имена. Хорошее имя описывает действие, которое выполняет функция.
Зачем выносить код в функции
Главная причина - убрать повторение. Представьте, что нужно несколько раз вывести одинаковый блок приветствия.
print("Привет, Олег!")
print("Рады видеть тебя на занятии")
print("-" * 24)
print("Привет, Нина!")
print("Рады видеть тебя на занятии")
print("-" * 24)Код работает, но повторяется. Если понадобится изменить текст, придется править несколько мест.
С функцией это выглядит чище:
def greet_student(name):
print(f"Привет, {name}!")
print("Рады видеть тебя на занятии")
print("-" * 24)
greet_student("Олег")
greet_student("Нина")Функции дают несколько преимуществ:
- меньше дублирования;
- проще читать код;
- легче исправлять логику;
- один и тот же блок можно переиспользовать в разных местах;
- сложную задачу можно разбить на понятные шаги.
Еще пример с расчетом площади:
def calculate_area(width, height):
area = width * height
print(f"Площадь: {area}")
calculate_area(8, 4)
calculate_area(12, 6)
calculate_area(5, 9)Параметры и аргументы
Параметры - это имена переменных в определении функции. Аргументы - это реальные значения, которые мы передаем при вызове.
def describe_user(name, age): # name и age - параметры
print(f"Имя: {name}, возраст: {age}")
describe_user("Алина", 26) # "Алина" и 26 - аргументыПозиционные аргументы
Позиционные аргументы передаются в том же порядке, в котором объявлены параметры.
def print_coordinates(x, y):
print(f"x = {x}, y = {y}")
print_coordinates(3, 9)
print_coordinates(9, 3)Порядок важен: значения попадут в разные параметры.
Именованные аргументы
Именованные аргументы явно указывают, какому параметру какое значение передается.
def describe_person(name, age, city):
print(f"{name}, {age}, {city}")
describe_person(name="Ирина", age=31, city="Тверь")
describe_person(city="Пермь", name="Кирилл", age=24)Такой вызов легче читать, особенно если у функции много параметров.
Значения по умолчанию
Параметр может иметь значение по умолчанию. Тогда при вызове его можно не указывать.
def create_message(name, greeting="Привет"):
return f"{greeting}, {name}!"
print(create_message("Лена"))
print(create_message("Лена", "Доброе утро"))Возвращаемое значение return
return возвращает результат работы функции наружу. После return выполнение функции прекращается.
def sum_numbers(a, b):
return a + b
result = sum_numbers(7, 11)
print(result)Без return функция тоже может что-то делать, например печатать текст, но ее результатом будет None.
def print_sum(a, b):
print(a + b)
value = print_sum(4, 5)
print(value) # Nonereturn удобно использовать, когда результат нужен дальше: сохранить в переменную, передать в другую функцию, сравнить или протестировать.
def is_even(number):
return number % 2 == 0
if is_even(18):
print("Число четное")Функция может вернуть несколько значений. На самом деле Python вернет кортеж.
def get_profile():
name = "София"
age = 29
return name, age
profile = get_profile()
print(profile)Область видимости
Область видимости определяет, где переменная доступна.
Локальные переменные
Локальная переменная создается внутри функции и доступна только там.
def show_number():
local_value = 15
print(local_value)
show_number()
# print(local_value) # NameErrorПосле завершения функции локальные переменные нельзя использовать снаружи.
Глобальные переменные
Глобальная переменная объявляется вне функций и доступна в модуле.
app_version = "1.0"
def print_version():
print(app_version)
print_version()
print(app_version)Изменять глобальные переменные внутри функции стоит осторожно. Если это действительно нужно, используется global.
counter = 0
def increment():
global counter
counter += 1
increment()
print(counter)Python ищет имена по правилу LEGB: Local, Enclosing, Global, Built-in. Сначала смотрит в локальной области, затем во внешних функциях, потом в глобальной области и только после этого во встроенных именах Python.
Практика
-
Задание 1: функция без параметров
Написать функцию
show_welcome(), которая не принимает параметров и выводит строкуДобро пожаловать!.def show_welcome(): print("Добро пожаловать!") show_welcome() -
Задание 2: приветствие пользователя
Написать функцию
greet_user(name), которая принимает имя и выводит приветствие видаПривет, [имя]!. Вызвать функцию с несколькими именами.def greet_user(name): print(f"Привет, {name}!") greet_user("Олег") greet_user("Марина") -
Задание 3: сумма двух чисел
Написать функцию
sum_numbers(a, b), которая принимает два числа и выводит их сумму.def sum_numbers(a, b): print(a + b) sum_numbers(8, 6) # 14 sum_numbers(-4, 13) # 9 -
Задание 4: проверка четности
Написать функцию
is_even(number), которая печатаетЧетное, если число четное, иНечетное, если число нечетное. Использовать оператор%.def is_even(number): if number % 2 == 0: print("Четное") else: print("Нечетное") is_even(12) is_even(5) is_even(0) -
Задание 5: площадь прямоугольника
Написать функцию
rectangle_area(width, height). Если ширина или высота меньше либо равны нулю, вывестиНекорректные значения. Иначе вывести площадь.def rectangle_area(width, height): if width <= 0 or height <= 0: print("Некорректные значения") else: print(width * height) rectangle_area(6, 9) # 54 rectangle_area(-3, 8) # Некорректные значения rectangle_area(4, 0) # Некорректные значения -
Задание 6: большее из двух чисел
Написать функцию
max_of_two(a, b), которая возвращает большее число черезreturn.def max_of_two(a, b): if a >= b: return a return b print(max_of_two(9, 14)) print(max_of_two(20, 3)) print(max_of_two(-2, -7)) -
Задание 7: длина строки
Написать функцию
string_length(text), которая принимает строку и возвращает ее длину.def string_length(text): return len(text) print(string_length("Python")) print(string_length("test automation")) print(string_length(""))
Дополнительные задания для закрепления
- Вызвать
printнесколькими способами: без аргументов, с одним аргументом, с двумя и тремя аргументами. - По очереди запустить некорректные выражения
print "Hello",len "abc",input "Введите число", прочитать ошибки и исправить код. - В одну строку вывести сумму чисел от 1 до 30 с помощью
sum()иrange(). - Создать функцию
print_line(), которая выводит 25 дефисов. - Создать функцию
get_lucky_number(), которая возвращает число 13. - Создать функцию
print_countdown(), которая выводит обратный отсчет от 7 до 1. - Создать функцию
print_table(num), которая выводит таблицу умножения дляnumот 1 до 6. - Создать функцию
get_grade(score): 90+ ->A, 80+ ->B, 70+ ->C, иначеF. - Создать функцию
double(x)и функциюprint_double_result(num), которая печатает результатdouble(num). - Создать функцию
filter_even_sum(a, b, c), которая возвращает сумму только четных чисел из трех переданных.
Далее: 03.02 - Исключения и обработка ошибок в Python ➡️ Модуль: 03 - MOC