Функции — базовое понятие в программировании: с их помощью можно разбить код на блоки, которые выполняют определенные задачи.
В этой статье мы познакомимся с основами создания и использования функций в 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.
- Сайт для начинающих изучать Python — теория и практические примеры.
- Введение в программирование на Python — небольшой курс по разработке на Python.
- Еще один сайт про Python — уроки, примеры, документация и прочее.
- Бесплатные онлайн ресурсы для изучения Python для новичков: курсы, тренажеры и блоги — подборка учебников, тренажеров и блогов.
- С чего начать учить Python — как освоить синтаксис, настроить среду, практиковаться и начать зарабатывать.