Перейти к содержимому
Editor

Функции в Python: создание, вызов и возвращаемые значения

Начальный25 min6 упр.80 XP

Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе

0/6 упр.

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

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

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

Как создать свою первую функцию

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

Определение функции
def greet():
print('Hello there!')
print('Welcome to Python.')
Вывод
(нет вывода)

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

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

Вызов функции
def greet():
print('Hello there!')
print('Welcome to Python.')
greet()
Вывод
Hello there!
Welcome to Python.

Теперь вывод появился. Именно скобки () после greet говорят Python выполнить функцию. Без них Python лишь смотрит на рецепт и ничего не готовит.

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

Многократный вызов функции
def greet():
print('Hello there!')
greet()
greet()
greet()
Вывод
Hello there!
Hello there!
Hello there!

Что такое параметры и аргументы?

Наша функция greet() всегда говорит одно и то же. Это как рецепт, по которому получаются только простые блины. А если хочется блинов с черникой? Нужен способ передать ингредиенты.

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

Функция с одним параметром
def greet(name):
print('Hello, ' + name + '!')
greet('Alice')
greet('Bob')
Вывод
Hello, Alice!
Hello, Bob!

Здесь name является параметром, то есть заполнителем. Когда мы вызываем greet('Alice'), строка 'Alice' становится аргументом: это конкретное значение, которое занимает место заполнителя.

Как работают возвращаемые значения?

Пока наши функции только выводили что-то на экран. Но чаще всего нужно, чтобы функция что-то вычислила и отдала результат вам. Для этого служит return.

Представьте это так: print() будто выкрикивает ответ вслух, а return будто пишет ответ на листке бумаги и передаёт его тому, кто спросил.

Возврат значения
def add(a, b):
return a + b
result = add(3, 5)
print(result)
Вывод
8

Инструкция return делает две вещи: отправляет значение туда, откуда функцию вызвали, и сразу же завершает функцию. Код, который стоит после return в той же функции, не выполнится.

Код после return недостижим
def add(a, b):
return a + b
print('This line never runs!')
print(add(3, 5))
Вывод
8
Вывод на экран (побочный эффект)
def add(a, b):
    print(a + b)

# Can't reuse the result
add(3, 5)
Возврат (отдаёт значение)
def add(a, b):
    return a + b

# Can store, reuse, combine
result = add(3, 5)
print(result * 2)

Несколько параметров

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

Функция с тремя параметрами
def introduce(name, age, city):
print(name + ' is ' + str(age) + ' years old and lives in ' + city + '.')
introduce('Alice', 25, 'New York')
introduce('Bob', 30, 'London')
Вывод
Alice is 25 years old and lives in New York.
Bob is 30 years old and lives in London.

Порядок важен. Если перепутать аргументы, получится бессмыслица или ошибка. introduce(25, 'Alice', 'London') попытается использовать 25 как имя.

Что такое значения параметров по умолчанию?

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

Значение параметра по умолчанию
def greet(name, greeting='Hello'):
print(greeting + ', ' + name + '!')
greet('Alice')
greet('Bob', 'Hey')
Вывод
Hello, Alice!
Hey, Bob!

Когда мы вызываем greet('Alice'), параметр greeting получает значение по умолчанию 'Hello'. Когда мы вызываем greet('Bob', 'Hey'), значение по умолчанию заменяется на 'Hey'.

Могут ли функции вызывать другие функции?

Конечно! Более того, это одна из самых мощных идей в программировании. Можно написать маленькие функции, каждая из которых решает свою узкую задачу, а потом собирать из них целое, как из кубиков.

Функции вызывают функции
def square(n):
return n * n
def sum_of_squares(a, b):
return square(a) + square(b)
result = sum_of_squares(3, 4)
print(result)
Вывод
25

Здесь sum_of_squares дважды вызывает square. Каждая маленькая функция выполняет одну простую работу. Вместе они решают задачу покрупнее. При таком подходе код проще читать, тестировать и исправлять.

Вспомогательная функция
def is_even(n):
return n % 2 == 0
def describe_number(n):
if is_even(n):
return str(n) + ' is even'
else:
return str(n) + ' is odd'
print(describe_number(7))
print(describe_number(10))
Вывод
7 is odd
10 is even

Практические упражнения

Поздоровайтесь
Напишите код

Напишите функцию say_hello, которая принимает параметр name и выводит Hello, <name>! (с восклицательным знаком). Например, say_hello('World') должна вывести Hello, World!.

# Define your function here
# Test it
say_hello('World')
say_hello('Python')
Предскажите вывод
Угадайте вывод

Внимательно прочитайте код ниже. Что он выведет? Введите точный вывод.

def double(x):
    return x * 2

result = double(7)
print(result)
print(double(3))
def double(x):
return x * 2
result = double(7)
print(result)
print(double(3))
Площадь прямоугольника
Напишите код

Напишите функцию area, которая принимает параметры width и height и возвращает их произведение (площадь прямоугольника). Ничего не выводите, только верните значение.

# Define your function here
# Test it
print(area(5, 3))
print(area(10, 7))
Исправьте сломанную функцию
Исправьте ошибку

Эта функция должна возвращать большее из двух чисел, но в ней есть ошибка. Найдите и исправьте её, чтобы bigger(3, 7) возвращала 7, а bigger(10, 5) возвращала 10.

def bigger(a, b):
    if a > b:
        return a
    return b
    return a

Стоп, логика вроде бы правильная, но тест не проходит. Внимательно посмотрите на каждую строку.

def bigger(a, b):
if a > b:
print(a)
print(b)
print(bigger(3, 7))
print(bigger(10, 5))
Конвертер температуры
Напишите код

Напишите функцию celsius_to_fahrenheit, которая принимает температуру в градусах Цельсия и возвращает её в градусах Фаренгейта. Формула: F = C * 9/5 + 32. Верните результат как число с плавающей точкой (float); формула сама его даёт.

# Define your function here
# Test it
print(celsius_to_fahrenheit(0))
print(celsius_to_fahrenheit(100))
print(celsius_to_fahrenheit(37))
Калькулятор оценок
Напишите код

Напишите функцию get_grade, которая принимает числовой балл score (0-100) и возвращает буквенную оценку в виде строки:

  • 90 и выше: 'A'
  • 80-89: 'B'
  • 70-79: 'C'
  • 60-69: 'D'
  • Ниже 60: 'F'
  • # Define your function here
    # Test it
    print(get_grade(95))
    print(get_grade(83))
    print(get_grade(72))
    print(get_grade(65))
    print(get_grade(45))

    Похожие уроки

    Урок был полезен?