Действие до сих пор записывалось одинаково: имя, скобки, значение внутри – len(s), ord(c), int(x). У строки для её собственных действий есть другая запись: s.upper() – сначала строка, потом точка, потом название действия.
Метод – это действие, которое вызывают у конкретного значения, приписывая его имя через точку.
s.find('@')читается «у строкиsнайди собаку».
Вызвать метод можно и прямо у строки, не заводя переменную: 'информатика'.count('а') – законная запись.
Зачем вторая форма, если есть len() и ord(). Разница в том, чьё это действие. len() умеет измерять что угодно – строку, список, файл, – поэтому стоит особняком. А поиск подстроки, смена регистра или разрезание – работа именно со строкой, и она «принадлежит» строке. Практическая выгода: набрав s., вы увидите в редакторе список всего, что строка умеет, – помнить наизусть ничего не нужно.
И главное правило всего урока. Строка неизменяема (урок 8.1), поэтому ни один метод строки её не трогает. Метод либо отвечает на вопрос – числом, строкой или True/False – либо строит рядом новую строку. Запись s = s.replace('а', 'о') означает «собрали новую строку и перевесили на неё имя s», а не «поправили строку на месте».
Отсюда ошибка, которая встретится в уроке ещё не раз: s.upper() без присваивания не делает ничего видимого – результат посчитан и выброшен. Не присвоил – потерял.