Перейти к содержанию
Educora
Средний17 мин9 / 42

Функции

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

Проверь себя
В этом уроке ты узнаешь
  • Определять функцию с помощью def и вызывать её
  • Возвращать результат через return и объяснять, чем это отличается от print
  • Использовать параметры со значениями по умолчанию и именованные аргументы
  • Различать локальные и глобальные переменные

Представь, что в пяти местах программы ты считаешь среднее значение и каждый раз копируешь одни и те же три строки. Потом находишь в расчёте ошибку — и исправлять её приходится в пяти местах! Функции решают эту проблему: код пишется один раз, получает имя и вызывается сколько угодно раз. print(), len() и sum() — уже знакомые тебе функции, а теперь ты создашь свои.

Определение и вызов функции

Функция определяется словом def, за которым идут имя функции, параметры в скобках и двоеточие. Тело функции — это блок с отступом. Сама по себе определённая функция ничего не делает: она работает, только когда её вызывают по имени.

Python
def greet(name):
    print(f'Hello, {name}!')

greet('Aysel')
greet('Murad')
▸ Ожидаемый результат
Hello, Aysel!
Hello, Murad!
Определение
Параметр и аргумент

Параметр — имя, указанное в определении функции (name). Аргумент — конкретное значение, которое передаётся этому параметру при вызове ('Aysel').

return: возврат результата

Обычно от функции ждут результата. return завершает работу функции и возвращает значение туда, откуда её вызвали. Это значение можно сохранить в переменной, использовать в другом расчёте или вывести на экран. Первая строка в тройных кавычках — строка документации (docstring): она кратко объясняет, что делает функция.

Python
def rectangle_area(width, height):
    """Return the area of a rectangle."""
    return width * height

room = rectangle_area(4, 3.5)
print('Room area:', room)
print('Two rooms:', rectangle_area(4, 3.5) + rectangle_area(3, 3))
▸ Ожидаемый результат
Room area: 14.0
Two rooms: 23.0

Новички часто путают print и return. print лишь выводит значение на экран, а return отдаёт его обратно программе. Функция без return по умолчанию возвращает None:

Python
def add_print(a, b):
    print(a + b)

def add_return(a, b):
    return a + b

x = add_print(2, 3)
y = add_return(2, 3)
print('x =', x)
print('y =', y)
▸ Ожидаемый результат
5
x = None
y = 5
add_print вывела 5 на экран, но ничего не вернула в x.
F = C · 9/5 + 32F = C · 9/5 + 32
где:
  • Fтемпература в градусах Фаренгейта
  • Cтемпература в градусах Цельсия

Превратим эту формулу в функцию

Python
def celsius_to_fahrenheit(c):
    return c * 9 / 5 + 32

for t in (0, 25, 100):
    print(f'{t} °C = {celsius_to_fahrenheit(t)} °F')
▸ Ожидаемый результат
0 °C = 32.0 °F
25 °C = 77.0 °F
100 °C = 212.0 °F

Значения по умолчанию и именованные аргументы

Параметру можно задать значение по умолчанию: если при вызове аргумент не передан, используется оно. Аргументы можно передавать и по имени — тогда их порядок не важен, а код легче читать.

Python
def final_price(price, discount=0):
    return price - price * discount / 100

print(final_price(80))
print(final_price(80, 25))
print(final_price(discount=10, price=50))
▸ Ожидаемый результат
80.0
60.0
45.0

Функция может вернуть сразу несколько результатов в виде кортежа. При вызове мы сразу распаковываем его в переменные:

Python
def min_max(numbers):
    return min(numbers), max(numbers)

low, high = min_max([12, 5, 27, 9])
print(low, high)
▸ Ожидаемый результат
5 27

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

Переменная, созданная внутри функции, — локальная: она существует, только пока функция работает, и снаружи не видна. Переменная, созданная вне функций, — глобальная. Если внутри функции присвоить значение переменной с тем же именем, глобальная не изменится — появится новая локальная.

Python
x = 10

def change():
    x = 5
    print('inside:', x)

change()
print('outside:', x)
▸ Ожидаемый результат
inside: 5
outside: 10
Задание

Напиши функцию average(numbers), которая принимает список и возвращает среднее арифметическое его элементов. Две строки с print в заготовке проверяют её — не меняй их.

Задание · Python
# define average(numbers) here

print(average([4, 5, 3, 5]))
print(average([10, 20]))
▸ Ожидаемый результат
4.25
15.0
Задание

Напиши функцию check(score, pass_mark=50), которая возвращает 'passed', если балл не меньше проходного, и 'failed' в противном случае. Если pass_mark не передан, он равен 50. Три вызова в заготовке не меняй.

Задание · Python
# define check(score, pass_mark=50) here

print(check(72))
print(check(45))
print(check(45, 40))
▸ Ожидаемый результат
passed
failed
passed

Главное

  • Функция определяется через def имя(параметры): и вызывается по имени.
  • return возвращает значение в место вызова; без return результат — None.
  • print выводит на экран, а return отдаёт значение программе.
  • Значения по умолчанию (discount=0) делают аргумент необязательным.
  • Переменные внутри функции локальные и снаружи не видны.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Каким словом определяется функция в Python?