Python: Создание (определение) функций
До этого момента мы использовали только уже готовые функции: print(), len(), max() и другие. Но в Python можно создавать свои собственные функции и пришла пора научиться это делать.
Зачем определять функции
Допустим, у нас есть несколько похожих участков кода:
print('Hello, Hexlet!')
print('Hello, world!')
print('Hello, Python!')Чтобы не повторять один и тот же шаблон, мы можем оформить его в виде своей функции, которая принимает на вход один параметр и печатает нужную строчку на экран:
def say_hello(name):
print(f'Hello, {name}!')Теперь мы можем вызывать ее с разными аргументами:
say_hello('Hexlet') # => Hello, Hexlet!
say_hello('world') # => Hello, world!
say_hello('Python') # => Hello, Python!Вроде бы количество кода не стало меньше, но появилось кое-что другое. Если эта функция будет использоваться в разных местах, то при необходимости изменить текст, нам будет достаточно поправить только определение функции. И чем сложнее будет задача и чем чаще она будет использоваться в разных местах, тем важнее нужно выделять логику в свои функции.
Синтаксис определения
def имя_функции(параметры):
телоdef greet(name): ← имя функции и параметр
return 'Hello, ' + name ← тело функции
│ │
ключевое возврат
слово значенияКлючевое слово def начинает определение. В имя_функции допускается любое имя, как у переменной; в скобках указывается список параметров через запятую. После двоеточия располагается тело функции с отступом в 4 пробела, в котором пишется обычный Python-код.
В Python отступы имеют синтаксическое значение. Они показывают, какой код относится к телу функции. Посмотрите на пример:
def say_hi():
print('Hi!')
print('Программа продолжается…')Здесь функция say_hi() определена, но print('Программа продолжается…') не относится к функции, так как у него нет отступа. Он будет выполнен сразу при запуске программы, независимо от вызова say_hi().
Чтобы say_hi() сработала, ее нужно явно вызвать:
def say_hi():
print('Hi!')
say_hi() # => Hi!
print('Программа продолжается…')Пример: функция для печати среднего арифметического
Сейчас мы реализуем простую функцию, которая вычисляет и печатает среднее арифметическое двух чисел. Среднее арифметическое представляет собой сумму чисел, деленную на их количество. Например, среднее от 6 и 4 считается так: (6 + 4) / 2 = 5.
def print_average(a, b):
total = a + b
average = total / 2
print(average)
print_average(6, 4) # => 5.0Здесь a и b являются входными параметрами, total содержит их сумму, average получается делением суммы на 2, а print() выводит результат.
При вызове print_average(6, 4) на экран выведется 5.0.
Переиспользование и читаемость
Функции помогают избегать дублирования и делают программы более понятными. Название функции само по себе говорит, что она делает. Это особенно важно в больших проектах, где код читают другие программисты (или вы сами через месяц).
Задание
Сайт выводит приветствие для каждого посетителя. Реализуйте функцию say_hello(), которая выводит на экран фразу Hello, World!.
say_hello() # => Hello, World!В задачах, в которых нужно реализовать функцию, эту функцию вызывать не нужно. Вызывать функцию будут автоматизированные тесты, которые проверяют ее работоспособность. Пример с вызовом выше показан только для того, чтобы вы понимали, как ваша функция будет использоваться.
Полезное
Python: Создание (определение) функций
До этого момента мы использовали только уже готовые функции: print(), len(), max() и другие. Но в Python можно создавать свои собственные функции и пришла пора научиться это делать.
Зачем определять функции
Допустим, у нас есть несколько похожих участков кода:
print('Hello, Hexlet!')
print('Hello, world!')
print('Hello, Python!')Чтобы не повторять один и тот же шаблон, мы можем оформить его в виде своей функции, которая принимает на вход один параметр и печатает нужную строчку на экран:
def say_hello(name):
print(f'Hello, {name}!')Теперь мы можем вызывать ее с разными аргументами:
say_hello('Hexlet') # => Hello, Hexlet!
say_hello('world') # => Hello, world!
say_hello('Python') # => Hello, Python!Вроде бы количество кода не стало меньше, но появилось кое-что другое. Если эта функция будет использоваться в разных местах, то при необходимости изменить текст, нам будет достаточно поправить только определение функции. И чем сложнее будет задача и чем чаще она будет использоваться в разных местах, тем важнее нужно выделять логику в свои функции.
Синтаксис определения
def имя_функции(параметры):
телоdef greet(name): ← имя функции и параметр
return 'Hello, ' + name ← тело функции
│ │
ключевое возврат
слово значенияКлючевое слово def начинает определение. В имя_функции допускается любое имя, как у переменной; в скобках указывается список параметров через запятую. После двоеточия располагается тело функции с отступом в 4 пробела, в котором пишется обычный Python-код.
В Python отступы имеют синтаксическое значение. Они показывают, какой код относится к телу функции. Посмотрите на пример:
def say_hi():
print('Hi!')
print('Программа продолжается…')Здесь функция say_hi() определена, но print('Программа продолжается…') не относится к функции, так как у него нет отступа. Он будет выполнен сразу при запуске программы, независимо от вызова say_hi().
Чтобы say_hi() сработала, ее нужно явно вызвать:
def say_hi():
print('Hi!')
say_hi() # => Hi!
print('Программа продолжается…')Пример: функция для печати среднего арифметического
Сейчас мы реализуем простую функцию, которая вычисляет и печатает среднее арифметическое двух чисел. Среднее арифметическое представляет собой сумму чисел, деленную на их количество. Например, среднее от 6 и 4 считается так: (6 + 4) / 2 = 5.
def print_average(a, b):
total = a + b
average = total / 2
print(average)
print_average(6, 4) # => 5.0Здесь a и b являются входными параметрами, total содержит их сумму, average получается делением суммы на 2, а print() выводит результат.
При вызове print_average(6, 4) на экран выведется 5.0.
Переиспользование и читаемость
Функции помогают избегать дублирования и делают программы более понятными. Название функции само по себе говорит, что она делает. Это особенно важно в больших проектах, где код читают другие программисты (или вы сами через месяц).
Задание
Сайт выводит приветствие для каждого посетителя. Реализуйте функцию say_hello(), которая выводит на экран фразу Hello, World!.
say_hello() # => Hello, World!В задачах, в которых нужно реализовать функцию, эту функцию вызывать не нужно. Вызывать функцию будут автоматизированные тесты, которые проверяют ее работоспособность. Пример с вызовом выше показан только для того, чтобы вы понимали, как ваша функция будет использоваться.
Полезное
Ваше упражнение проверяется по этим тестам
import solution
def test(capsys):
expected = "Hello, World!"
solution.say_hello()
out, _ = capsys.readouterr()
with capsys.disabled():
print('\n')
print(out)
assert out.strip('\n') == expectedРешение учителя откроется через:
20:00
