Я хотел бы написать функцию в Python, которая принимает срез как параметр. В идеале пользователь должен был бы вызвать функцию следующим образом:
foo(a:b:c)
К сожалению, этот синтаксис не разрешен Python - использование a:b:c
разрешено только внутри []
, а не ()
.
Поэтому я вижу три возможности для моей функции:
-
Требовать от пользователя использования "конструктора" среза (где
s_
действует как версия, предоставляемая numpy):foo(slice(a, b, c)) foo(s_[a:b:c])
-
Поместите логику моей функции в метод
__getitem__
:foo[a:b:c]
-
Откажитесь от попыток взять срез и начать, остановить и выполнить индивидуально:
foo(a, b, c)
Есть ли способ заставить исходный синтаксис работать? Если нет, какой из синтаксисов обходных путей будет предпочтительнее? Или есть другой, лучший вариант?