Виклик методів ланцюжком¶
Часто з даними треба виконати кілька операцій, наприклад:
In [1]: line = "switchport trunk allowed vlan 10,20,30"
In [2]: words = line.split()
In [3]: words
Out[3]: ['switchport', 'trunk', 'allowed', 'vlan', '10,20,30']
In [4]: vlans_str = words[-1]
In [5]: vlans_str
Out[5]: '10,20,30'
In [6]: vlans = vlans_str.split(",")
In [7]: vlans
Out[7]: ['10', '20', '30']
Або у скрипті:
line = "switchport trunk allowed vlan 10,20,30"
words = line.split()
vlans_str = words[-1]
vlans = vlans_str.split(",")
print(vlans)
У цьому випадку змінні використовуються для зберігання проміжного результату та наступні методи/дії виконуються вже зі змінною. Це цілком нормальний варіант коду, особливо спочатку, коли важко сприймати складніші висловлювання.
Однак у Python часто зустрічаються вирази, в яких дії або методи застосовуються один за одним в одному виразі. Наприклад, попередній код можна записати так:
Так як тут немає виразів у дужках, які б вказували на пріоритет виконання, все
виконується зліва направо. Спочатку виконується line.split()
– отримуємо
список, потім до отриманого списку застосовується [-1]
– отримуємо останній
елемент списку, рядок "10,20,30"
. До цього рядка застосовується метод split(",")
і в результаті одержуємо список ['10', '20', '30']
.
Головний нюанс при написанні таких ланцюжків попередній метод/дія має повертати те, що чекає наступний метод/дія. І обов'язково, щоб щось поверталося, інакше буде помилка.