Введение

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

Термины, которые будем использовать:

функция, параметры, аргументы, локальные и глобальные переменные, область видимости переменных, snake case.

Что такое функция

Функция — это вынесенный блок кода, который выполняет определённый алгоритм.

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

Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

Назначение функций

  1. Повторное использование кода: напиши один раз — используй сколько угодно.
  2. Большая программа разбивается на логические блоки (функции).
  3. Легче найти ошибку в одной маленькой функции, чем в большом монолитном коде.

  4. Можно использовать сложную функцию, не вникая в то, как именно она работает внутри, главное — какой результат возвращает.

Синтаксис собственной функции

def say_hello():

print(«Привет, мир!»)

def — ключевое слово, обозначающее начало блока функции,

say_hello() — имя функции, может быть любым (не зарезервированным), в круглых скобках можно указать параметры, которая функция должна принимать (в нашем примере их нет). Принято придерживаться snake_case — слова отделяются нижним подчёркиванием и начинаются с маленькой буквы. Тело функции начинается после двоеточия и каждая строка идёт с отступом.

Важно! Код в теле функции не выполняется сам по себе, чтобы он выполнился, нужно явно вызвать функцию. Причём вызов должен быть ниже в коде, чем сама функция.

Пример:
def say_hello():

print(«Привет, мир!»)

say_hello()

Вывод: Привет, мир!

Но если попытаться вызвать функцию до её инициализации, возникнет ошибка:

say_hello()

def say_hello():

print(«Привет, мир!»)

NameError: name ‘say_hello’ is not defined

Функции, которые получают данные: параметры и аргументы

Параметр — это переменная в определении функции (внутри скобок def).

Аргумент — это конкретное значение, которое мы передаём функции при вызове.

Простой пример с одним параметром

def greet(name):

print(«Привет, » + name)

greet(«Анна») # «Анна» — аргумент

Вывод: Привет, Анна

Функция с несколькими параметрами

def introduce(name, age):

print(f»Меня зовут {name}, мне {age} лет.»)

introduce(«Петр», 25)

Вывод: Меня зовут Петр, мне 25 лет.

Важно! Аргументы для функции передаются в том же порядке, в котором были объявлены параметры.

Функции, которые возвращают результат: ключевое слово return

return — ключевое слово, значение после которого будет возвращено основной программе, которая эту функцию вызвала. Например, когда мы вызвали функцию len(), она возвращала нам длину строки — число, которое мы в дальнейшем использовали.

def add(a, b):

result = a + b

return result

sum_result = add(5, 3) # результат (8) сохраняется в переменную

print(sum_result * 2) # можно работать с результатом дальше (16)

У одной функции может быть несколько return в зависимости от условий и входных данных, но как только сработает один из них, дальнейший блок кода выполняться уже не будет — это как break для цикла.

def is_positive(x):

if x > 0:

return True

return False

print(is_positive(5)) # True

print(is_positive(0)) # False

print(is_positive(–9)) # False

В зависимости от знака функция возвращает булевое значение, но всегда только одно: если условие истинно, вернётся True и блок кода завершится, если ложно — вернётся False.

Так как выражение x >0 само по себе возвращает булевое значение, функцию можно упростить:

def is_positive(x):

return x > 0

Области видимости переменных (локальные и глобальные)

Локальная переменная — это твой личный дневник, который лежит в твоей комнате. Его видишь и меняешь только ты. Из кухни или с улицы до него не дотянуться.

Глобальная переменная — это доска объявлений в подъезде твоего дома. Её видят все жильцы (все функции в твоей программе) и могут читать, что на ней написано.

Это глобальная область (наш «подъезд»)

global_message = «Я на доске в подъезде (глобальная)» # Глобальная переменная

global_counter = 0 # ещё одна глобальная переменная

def read_from_porch():

Функция — как жилец, который вышел из квартиры в подъезд

print(«Читаю объявление:», global_message)

read_from_porch() # Выведет: «Читаю объявление: Я на доске в подъезде (глобальная)»

То есть глобальная переменная global_message видна изнутри функции.

global_message = «Я на доске в подъезде»

def close_the_door():

# Мы зашли в функцию (в свою комнату) и закрыли дверь

local_secret = «Мой личный пароль (локальная)» # Локальная переменная

print(«Внутри комнаты я знаю:», local_secret) # Её видно ТОЛЬКО здесь

close_the_door() # Выведет: «Внутри комнаты я знаю: Мой личный пароль (локальная

# А теперь попробуем прочесть локальную переменную снаружи:

# print(local_secret) # NameError: name ‘local_secret’ is not defined

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

ПризнакЛокальная переменнаяГлобальная переменная
Где создаётсяВнутри функцииВ основном коде, вне функций
Где виднаТолько внутри своей функции.Во всей программе (во всех функциях).
Время жизниСоздаётся при вызове функции, уничтожается при её завершении.Существует всё время работы программы.
Как изменить из функцииИзменяется напрямую.Передать как аргумент, вернуть результат.

Главное правило

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

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

Выход: результат своей работы функция отправляет наружу только через return.

Следуй этому простому правилу, и все ошибки обойдут тебя стороной.

Задание для самопроверки

Задание 1.

Напиши функцию is_even(num), которая возвращает True, если число чётное, и False — если нет.

def is_even(num):

return num % 2 == 0

Задание 2.

Напиши функцию find_max(list_of_numbers), которая возвращает максимальное число из списка. Пользоваться встроенное функцией max() нельзя.

def find_max(list_of_numbers):

res = list_of_numbers[0]

for x in list_of_numbers:

if x > res:

res = x

return res

Задание 3.

Усложни функцию greet(), чтобы она могла принимать не только имя, но и язык приветствия (например, «en» или «ru»), и возвращала соответствующее приветствие.

def greet(name, language):

if language == «ru»:

return f»Привет, {name}»

return f»Hello, {name}»

Автор:

Быкова Оксана, методист «100балльного репетитора» по информатике ЕГЭ

Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

В 100б ты пробьёшь свой
максимум на экзаменах

наши лучшие курсы

Выбери подходящий курс и предмет, чтобы прокачаться и сдать ОГЭ на «5», а ЕГЭ на 80+ баллов

Выбрать курс

бесплатные материалы

Курсы, вебы, чек-листы — всё за 0 ₽

Забрать за 0 ₽

Интенсив по поступлению

Запишись на интенсив по поступлению, чтобы
взять из ЕГЭ максимум и попасть в вуз мечты

Записаться
В 100балльном репетиторе ты пробьёшь свой максимум на экзаменах

Преимущества подготовки
в 100балльном

10+
лет средний опыт наших преподавателей

18
выпускников сдали ЕГЭ
на 200 из 200 в 2024 году

300k+
учеников поступили в вуз мечты с нашей помощью 

14%
стобалльников России — наши выпускники

2 347
выпускника сдали ЕГЭ на 100 баллов

Преимущества подготовки в 100балльном

Запишись
на бесплатный
вводный урок

Познакомим с преподавателями и платформой

Расскажем про учёбу

Поможем поставить цель

  • 11 класс
  • 10 класс
  • 9 класс
  • 8 класс
  • 7 класс
Запись на вводный урок