- Определять функцию с помощью
defи вызывать её - Возвращать результат через
returnи объяснять, чем это отличается отprint - Использовать параметры со значениями по умолчанию и именованные аргументы
- Различать локальные и глобальные переменные
Представь, что в пяти местах программы ты считаешь среднее значение и каждый раз копируешь одни и те же три строки. Потом находишь в расчёте ошибку — и исправлять её приходится в пяти местах! Функции решают эту проблему: код пишется один раз, получает имя и вызывается сколько угодно раз. print(), len() и sum() — уже знакомые тебе функции, а теперь ты создашь свои.
Определение и вызов функции
Функция определяется словом def, за которым идут имя функции, параметры в скобках и двоеточие. Тело функции — это блок с отступом. Сама по себе определённая функция ничего не делает: она работает, только когда её вызывают по имени.
def greet(name):
print(f'Hello, {name}!')
greet('Aysel')
greet('Murad')▸ Ожидаемый результат
Hello, Aysel! Hello, Murad!
Параметр — имя, указанное в определении функции (name). Аргумент — конкретное значение, которое передаётся этому параметру при вызове ('Aysel').
return: возврат результата
Обычно от функции ждут результата. return завершает работу функции и возвращает значение туда, откуда её вызвали. Это значение можно сохранить в переменной, использовать в другом расчёте или вывести на экран. Первая строка в тройных кавычках — строка документации (docstring): она кратко объясняет, что делает функция.
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:
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температура в градусах Цельсия
Превратим эту формулу в функцию
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
Значения по умолчанию и именованные аргументы
Параметру можно задать значение по умолчанию: если при вызове аргумент не передан, используется оно. Аргументы можно передавать и по имени — тогда их порядок не важен, а код легче читать.
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
Функция может вернуть сразу несколько результатов в виде кортежа. При вызове мы сразу распаковываем его в переменные:
def min_max(numbers):
return min(numbers), max(numbers)
low, high = min_max([12, 5, 27, 9])
print(low, high)▸ Ожидаемый результат
5 27
Область видимости переменных
Переменная, созданная внутри функции, — локальная: она существует, только пока функция работает, и снаружи не видна. Переменная, созданная вне функций, — глобальная. Если внутри функции присвоить значение переменной с тем же именем, глобальная не изменится — появится новая локальная.
x = 10
def change():
x = 5
print('inside:', x)
change()
print('outside:', x)▸ Ожидаемый результат
inside: 5 outside: 10
Напиши функцию average(numbers), которая принимает список и возвращает среднее арифметическое его элементов. Две строки с print в заготовке проверяют её — не меняй их.
# 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. Три вызова в заготовке не меняй.
# 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.