Баннер мобильный (1) Пройти тест

Как создавать и использовать функции в Python

Разбираемся на простых примерах

Разбор

1 апреля 2024

Поделиться

Скопировано
Как создавать и использовать функции в Python

Содержание

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

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

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

    Функция в программировании — это фрагмент кода, который можно вызвать на исполнение из другого места программы, когда он понадобится. Проще говоря, чтобы каждый раз не писать одно и то же, программисты пишут какой-нибудь кусок кода один раз, а потом используют его снова и снова.

    Обычно, хотя и не всегда, у функции есть имя и она принимает на вход один или несколько параметров. Также функции возвращают или не возвращают какие-либо значения. 

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

    Для запуска примеров, приведенных в этой статье, отлично подойдет интегрированная среда разработки (IDE) PyCharm от компании JetBrains. О том, как ее установить и создать проект, можно прочитать в этой публикации.

    Простейшая функция: Hello, World!

    Функции в языке Python создаются при помощи ключевого слова def. Ниже приводится пример простейшей функции, которая выводит в консоль фразу «Hello, World!»:

    def say_hello():
        print("Hello, World!")

    Сразу после def идет имя функции, а после него в круглых скобках должны находиться аргументы для этой функции — в примере выше они не указаны. Аргументы, они же параметры, нужны для передачи функции каких-либо значений. Давайте перепишем функцию say_hello так, чтобы ей на вход можно было передать параметр в виде строки с приветствием:

    def say_hello(str):
        print(str)

    Теперь, чтобы функция начала работать, надо просто написать:

    say_hello("Hello, World!")

    Весь код этой программы выглядит так:

    def main(argv):
        say_hello("Hello, World!")
    
    def say_hello(str):
        print(str)

    Функция main — это точка входа. Это самая главная функция, и с нее начинается выполнение всей программы. Далее рассмотрим пример посложнее.

    Високосный год 

    Функции могут не только принимать на вход какие-то значения, но и возвращать результат обработки этих значений. В примере, который мы рассмотрим дальше, функция будет определять високосность года и возвращать True (Истина) или False (Ложь) в зависимости от результата. Код функции:

    def is_leap_year(year):
        if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
          return True
        else:
          return False

    Но его можно упростить до такого вида:

    def is_leap_year(year):
        return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0

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

    def main(argv):
        year = int(input('Введите год: '))
    
        if is_leap_year(year):
          print('Год високосный.')
        else:
          print('Год не високосный.')
    
    def is_leap_year(year):
        return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0

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

    Площадь треугольника

    Теперь рассмотрим программу, которая вычисляет площадь треугольника. Как известно, эту площадь легко вычислить — нужно взять половину от произведения высоты (h) на основание треугольника (a). То есть функция будет иметь такой вид:

    def square(a, h):
        return (a*h)/2

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

    def main(argv):
        h = float(input("Введите высоту:"))
        a = float(input("Введите длину основания:"))
        print(square(a, h))
    
    def square(a, h):
        return (a*h)/2

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

    Функции из модулей и встроенные функции

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

    import calendar

    И только после этого мы можем использовать функцию isleap, входящую в состав этого модуля:

    if calendar.isleap(year):
      print('Год високосный.')
    else:
      print('Год не високосный.')

    Весь код примера:

    import calendar
    
    def main(argv):
        year = int(input('Введите год: '))
    
        if calendar.isleap(year):
          print('Год високосный.')
        else:
          print('Год не високосный.')

    Приведем еще один пример. На этот раз попробуем сгенерировать случайное число и вывести его в консоль. Для этого нам понадобится модуль random. Сделаем импорт в самом начале исходника:

    import random

    Теперь можно смело его использовать:

    rand = random.randint(1, 10)
    print(rand)

    Программа сгенерирует для нас случайное число из диапазона от единицы до десяти и выведет его в консоль. Помимо функций, требующих импорта каких-либо модулей, в Python есть множество функций, которые работают без всяких импортов. Например, функция len, которая понадобится, если нужно определить длину строки:

    l = len("abc")
    print(l)

    В консоль будет выведено значение, равное трем. Такие функции называются встроенными. Другой пример такой функции — это функция abs. Она возвращает модуль числа, которое указывается в качестве ее параметра:

    a = abs(-5)
    print(a)

    В консоль будет выведено значение, равное пяти. В примерах выше использовались встроенные функции int, float, input и print. Функция int нужна для преобразования значения аргумента в целое число, float преобразует аргумент в число с плавающей точкой, а остальные две функции, думаем, не требуют лишних пояснений.

    Игра «Угадай число»

    Разберем небольшую игровую программу. Эта программа загадывает число от 1 до 100, а пользователь должен это число угадать. Исходный код программы:

    import random
    
    def main(argv):
        num = 0
        counter = 0
        rand = random.randint(1,100)
        print("Попробуйте отгадать загаданное мной число от 1 до 100")
        while num != rand:
              num = int(input("Введите число:\n"))
              counter = counter + 1
              if num > rand:
                print("Число должно быть меньше")
              elif num < rand:
                print("Число должно быть больше")
              else:
                print("Вы угадали загаданное число за "+ str(counter) + " попыток")
                break

    Видим знакомый нам импорт random, а также функции int, input и print. Также в программе присутствует функция str. В качестве аргумента ей на вход подается счетчик попыток counter, который представляет из себя целое число. Так как для print нужно строковое значение, то функция str преобразует целое число в строку.

    Сама программа довольно простая. С помощью randint из модуля random программа генерирует случайное число от 1 до 100. Это число присваивается переменной rand. Далее в цикле while происходит ввод числа пользователем и его проверка. В зависимости от результата проверки выводятся те или иные сообщения.

    Анонимные функции

    Напоследок расскажем об анонимных функциях. Такие функции объявляются без имени, в отличие от стандартных. Создаются они при помощи ключевого слова lambda и поэтому называются еще лямбда-функциями. Пример такой функции:

    a = lambda x : x + 6

    Чтобы получить результат вычисления в консоли, можно поступить так:

    print(a(10))

    В результате в консоли появится результат: 16. Анонимные функции используются однократно, в том участке кода, где были созданы. Они могут иметь несколько параметров. Пример функции с тремя параметрами:

    b = lambda a, b, c : a * b * c

    Очевидно, что такие функции не могут заменить обычные — в лямбда-функцию нельзя добавить цикл, условный оператор и тому подобное. Зато обычные функции могут с легкостью заменить лямбда-функции. Например, предыдущая функция с тремя параметрами в виде обычной функции будет выглядеть следующим образом:

    def b (a, b, c):
        return a * b * c

    Но тогда возникает закономерный вопрос: зачем вообще нужны анонимные функции? Такие функции лаконичны, удобны для записи и в некоторых случаях помогают сократить код и повысить его читаемость.

    Полезные ссылки

    Ниже приведем ссылки на полезные ресурсы, где можно узнать много нового и интересного о разработке на языке программирования Python.

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии