До этого момента мы работали только с функциями: они получают данные, что-то делают с ними и возвращают результат. Но в Python есть ещё один похожий механизм — методы.
Метод — это та же функция, только «привязанная» к конкретному значению определённого типа данных. То есть вместе с самим значением мы получаем набор функций, которые умеют с ним работать.
Методы строк
Например, у строк есть свои методы для преобразования текста. Метод upper()
переводит все буквы в верхний регистр:
text = 'hexlet'
print(text.upper()) # => HEXLET
В отличие от функций, у методов сначала пишется значение (строка text
), затем через точку имя метода (upper
), и уже потом скобки.
Встроенных методов у строк довольно много. Ниже некоторые из них:
# Перевод первой буквы в верхний регистр
'hexlet'.capitalize() # => Hexlet
# Перевод всех букв в нижний регистр
print('HeXleT'.lower()) # => hexlet
# Удаление пробелов в начале и конце строки
print(' hi '.strip()) # => hi
Некоторые методы принимают параметры. Например, у метода replace()
первый параметр — это подстрока, которую нужно заменить, а второй — строка-замена.
text = 'abracadabra'
print(text.replace('a', 'o')) # => obrocodobro
print(text.replace('abra', '!')) # => !cad!
Методов в Python действительно много, и их не учат наизусть. Обычно программисты в процессе работы запоминают, какие операции им вообще нужны и как примерно называются такие методы. А когда возникает задача — они либо вспоминают подходящий метод, либо быстро находят его в документации.
Метод и функция — в чём разница
С точки зрения кода, методы и функции ведут себя похоже: они принимают значения и возвращают результат. Разница в том, как они вызываются:
# Вызов функции
len('hexlet')
# Вызов метода
'hexlet'.upper()
Функция вызывается снаружи и получает аргумент в скобках. Метод — это как будто операция, встроенная в само значение. Под капотом значение передается внутрь как нулевой параметр, но это скрыто от нас.
Методы возвращают значения
Методы работают точно так же, как функции: они возвращают результат, а не выводят его на экран. Это значит, что их можно использовать в составе выражений:
print('hexlet'.upper()) # => HEXLET
print('hi'.replace('i', 'ello')) # => hello
Методы строк не изменяют саму строку, а возвращают новую. Это поведение называется иммутабельностью. Мы ещё поговорим об этом позже, но пока важно понимать, что строка остаётся прежней, а результат метода — это новое значение.
Зачем нужны методы в Python
В Python часть возможностей реализована именно как методы. Это позволяет сгруппировать операции рядом с типами данных, к которым они относятся. У строк есть один набор методов, у чисел другой, у списков третий. Таким образом, в языке сосуществуют два способа работы: функции общего назначения и методы, "прикреплённые" к конкретным типам.