Python: Цепочка вызовов
Метод представляет собой операцию, которая применяется к значению и возвращает новый результат. Если результат снова позволяет вызывать методы, то к нему можно применить еще один метод. Такой прием называется цепочка методов (method chaining).
text = ' hExLeT '
result = text.strip().lower()
print(result) # => 'hexlet'- Метод
strip()удаляет пробелы в начале и конце строки и возвращает'hExLeT'. - Метод
lower()делает все буквы строчными и возвращает'hexlet'.

Методы вызываются один за другим, как звенья в цепочке. Это позволяет писать компактный и читаемый код.
print(' hExLeT '.strip().lower().replace('h', 'x')) # => xexlet
# То же самое, но без цепочки
text = ' hExLeT '
step1 = text.strip() # 'hExLeT'
step2 = step1.lower() # 'hexlet'
step3 = step2.replace('h', 'x') # 'xexlet'
print(step3)strip()удаляет пробелы.lower()делает буквы строчными.replace('h', 'x')меняетhнаx.
Каждый метод возвращает новую строку, и следующий метод применяется уже к этой строке.
' Hello, World! '.strip().lower().replace('world', 'python')
│ │ │
↓ ↓ ↓
'Hello, World!' │ │
'hello, world!' │
'hello, python!'Порядок вычисления
В цепочке методов порядок выполнения идет слева направо. Каждый следующий метод вызывается на результате предыдущего.
print(' hExLeT '.strip().lower().replace('h', 'x')) # => xexlet' hExLeT 'является исходной строкой..strip()удаляет пробелы и возвращает'hExLeT'..lower()приводит к нижнему регистру и возвращает'hexlet'..replace('h', 'x')заменяет'h'на'x'и возвращает'xexlet'.
При использовании функций внутренняя часть выполняется первой, и ее результат передается в следующую функцию.
# Условный пример, если бы strip и lower были функциями
print(lower(strip(' hExLeT ')))В методах вы просто "двигаетесь" слева направо, читая цепочку как обычное предложение. Это делает работу с методами особенно удобной.
Если перепутать порядок, результат может отличаться:
print(' hExLeT '.replace('h', 'x').strip().lower()) # => xexletВ этом случае replace() сработает на строку с пробелами. Итог оказался тем же, но это скорее совпадение. В других ситуациях порядок действительно имеет значение.
Цепочка после среза
Методы можно вызывать и после других операций, например, после среза строки:
text = ' Hello, Hexlet! '
# Удаляем пробелы, берем подстроку и переводим в нижний регистр
print(text.strip()[7:].lower()) # => hexlet!Здесь сначала вызывается strip(), который удаляет пробелы. Затем мы берем срез строки [7:], начиная с восьмого символа. И уже после этого вызывается lower(), чтобы привести результат к нижнему регистру.
Такая запись читается слева направо и показывает весь путь преобразования данных в одной строке.
Где цепочка заканчивается
Цепочку можно продолжать, пока результат остается строкой (или другим типом, у которого есть методы). Если метод возвращает число или другой простой тип, то дальнейшие методы вызывать уже нельзя:
text = 'hexlet'
length = text.upper().count('E')
print(length) # => 2Метод count() возвращает число 2, и это число уже не имеет строковых методов, поэтому цепочка на этом заканчивается.
Цепочки методов служат удобным способом объединять несколько операций над значением без промежуточных переменных.
Задание
В переменной text хранится строка лога с лишними пробельными символами внутри. Возьмите часть строки с 5 по 15 символ включительно, удалите лишние пробелы по краям методом .strip() и выведите на экран длину получившейся строки.
Все действия выполните в одной цепочке — без создания промежуточных переменных.
Подсказки
- Индексы в строках начинаются с нуля. Например, 4-й символ имеет индекс
3. - При работе со срезами первый индекс включается, а второй — нет. Например,
text[4:6]вернет 5-й и 6-й символы строки.
Python: Цепочка вызовов
Метод представляет собой операцию, которая применяется к значению и возвращает новый результат. Если результат снова позволяет вызывать методы, то к нему можно применить еще один метод. Такой прием называется цепочка методов (method chaining).
text = ' hExLeT '
result = text.strip().lower()
print(result) # => 'hexlet'- Метод
strip()удаляет пробелы в начале и конце строки и возвращает'hExLeT'. - Метод
lower()делает все буквы строчными и возвращает'hexlet'.

Методы вызываются один за другим, как звенья в цепочке. Это позволяет писать компактный и читаемый код.
print(' hExLeT '.strip().lower().replace('h', 'x')) # => xexlet
# То же самое, но без цепочки
text = ' hExLeT '
step1 = text.strip() # 'hExLeT'
step2 = step1.lower() # 'hexlet'
step3 = step2.replace('h', 'x') # 'xexlet'
print(step3)strip()удаляет пробелы.lower()делает буквы строчными.replace('h', 'x')меняетhнаx.
Каждый метод возвращает новую строку, и следующий метод применяется уже к этой строке.
' Hello, World! '.strip().lower().replace('world', 'python')
│ │ │
↓ ↓ ↓
'Hello, World!' │ │
'hello, world!' │
'hello, python!'Порядок вычисления
В цепочке методов порядок выполнения идет слева направо. Каждый следующий метод вызывается на результате предыдущего.
print(' hExLeT '.strip().lower().replace('h', 'x')) # => xexlet' hExLeT 'является исходной строкой..strip()удаляет пробелы и возвращает'hExLeT'..lower()приводит к нижнему регистру и возвращает'hexlet'..replace('h', 'x')заменяет'h'на'x'и возвращает'xexlet'.
При использовании функций внутренняя часть выполняется первой, и ее результат передается в следующую функцию.
# Условный пример, если бы strip и lower были функциями
print(lower(strip(' hExLeT ')))В методах вы просто "двигаетесь" слева направо, читая цепочку как обычное предложение. Это делает работу с методами особенно удобной.
Если перепутать порядок, результат может отличаться:
print(' hExLeT '.replace('h', 'x').strip().lower()) # => xexletВ этом случае replace() сработает на строку с пробелами. Итог оказался тем же, но это скорее совпадение. В других ситуациях порядок действительно имеет значение.
Цепочка после среза
Методы можно вызывать и после других операций, например, после среза строки:
text = ' Hello, Hexlet! '
# Удаляем пробелы, берем подстроку и переводим в нижний регистр
print(text.strip()[7:].lower()) # => hexlet!Здесь сначала вызывается strip(), который удаляет пробелы. Затем мы берем срез строки [7:], начиная с восьмого символа. И уже после этого вызывается lower(), чтобы привести результат к нижнему регистру.
Такая запись читается слева направо и показывает весь путь преобразования данных в одной строке.
Где цепочка заканчивается
Цепочку можно продолжать, пока результат остается строкой (или другим типом, у которого есть методы). Если метод возвращает число или другой простой тип, то дальнейшие методы вызывать уже нельзя:
text = 'hexlet'
length = text.upper().count('E')
print(length) # => 2Метод count() возвращает число 2, и это число уже не имеет строковых методов, поэтому цепочка на этом заканчивается.
Цепочки методов служат удобным способом объединять несколько операций над значением без промежуточных переменных.
Задание
В переменной text хранится строка лога с лишними пробельными символами внутри. Возьмите часть строки с 5 по 15 символ включительно, удалите лишние пробелы по краям методом .strip() и выведите на экран длину получившейся строки.
Все действия выполните в одной цепочке — без создания промежуточных переменных.
Подсказки
- Индексы в строках начинаются с нуля. Например, 4-й символ имеет индекс
3. - При работе со срезами первый индекс включается, а второй — нет. Например,
text[4:6]вернет 5-й и 6-й символы строки.
Ваше упражнение проверяется по этим тестам
import importlib
def test(capsys):
expected = "7"
expect_output(capsys, expected)
def expect_output(capsys, expected):
importlib.import_module('solution')
out, _err = capsys.readouterr()
actual = out.strip('\n')
with capsys.disabled():
print('\n')
print(out)
assert actual == expectedРешение учителя откроется через:
20:00
