Я хотел бы написать функцию в 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)
Есть ли способ заставить исходный синтаксис работать? Если нет, какой из синтаксисов обходных путей будет предпочтительнее? Или есть другой, лучший вариант?