Экспонирует расширенный протокол резки путем обертывания встроенного типа ломтика. Семантика конструкторов и функций-членов, определенных ниже, может быть полностью понята путем прочтения понятия TypeWrapper. Поскольку slice публично происходит от объект, публичная объект интерфейс применяется к slice экземплярам.
namespaceboost{namespacepython{classslice:publicobject{public:slice();// create an empty slice, equivalent to [::]template<typenameInt1,typenameInt2>slice(Int1start,Int2stop);template<typenameInt1,typenameInt2,typenameInt3>slice(Int1start,Int2stop,Int3step);// Access the parameters this slice was created with.objectstart();objectstop();objectstep();// The return type of slice::get_indices()template<typenameRandomAccessIterator>structrange{RandomAccessIteratorstart;RandomAccessIteratorstop;intstep;};template<typenameRandomAccessIterator>range<RandomAccessIterator>get_indices(RandomAccessIteratorconst&begin,RandomAccessIteratorconst&end);};}}
start, stop, и step имеют тип slice_nil или конвертируемый в тип объект.
Effects
конструирует новый кусок с по умолчанию ступенчатым значением и предоставленными значениями запуска и остановки. Эквивалент к объекту среза, созданному встроенной функцией Python slice(start,stop), или как часть выражения Python base[start:stop>.
Throws
error_already_set и устанавливает исключение типа Python, если невозможно преобразование из аргументов в тип объекта.
start, stop, и step являются slice_nil или конвертируемыми в тип объект.
Effects
конструирует новый срез с стартовыми остановками и шагами. Эквивалент к объекту среза, созданному встроенной функцией Python slice(start,stop,step), или как часть выражения Python base[startостановкаостановка:step>.
Throws
error_already_set и устанавливает исключение типа Python, если невозможно преобразование из аргументов в тип объекта.
параметр, с которым был создан срез. Если параметр был опущен или slice_nil был использован при создании среза, то этот параметр будет ссылкой на PyNone и сравниваться с по умолчанию построенным объектом. В принципе, любой объект может быть использован при создании объекта среза, но на практике они обычно являются целыми.
Пара STL-соответствующих Random Access Iterators, которые образуют полуоткрытый диапазон.
Effects
Создание рандома Итераторная пара, которая определяет полностью закрытый диапазон в пределах [begin,end) диапазон своих аргументов. Эта функция переводит индексы этого среза при учете эффектов любого PyNone или отрицательных индексов, а также не-сингулярных размеров шагов.
Returns
a slice::range, который был инициализирован с ненулевой ценностью шага и парой RandomAccessIterators, которые указывают в пределах диапазона этих аргументов функций и определяют замкнутый интервал.
Throws
Увеличивает исключение Python TypeError, если какой-либо из аргументов этого среза не является ни ссылками на PyNone, ни кабриолетом. Throws std::invalid_argument, если полученный диапазон будет пустым. Вы всегда должны обернуть звонки на slice::get_indices() в пределах три{...;}catch(std::invalid_argument){}, чтобы справиться с этим делом и предпринять соответствующие действия.
Rationale
закрытый вход: Если бы использовался открытый интервал, то для размера шага, отличного от 1, требуемое состояние для конечного итератора указывало бы за пределы одно-пастевой позиции или до начала заданного диапазона. исключения на пустом кусочке: Невозможно определить замкнутый интервал по пустому диапазону, поэтому для предотвращения неопределенного поведения должна быть использована другая форма проверки ошибок. В случае, если исключение не застигнуто, оно будет просто переведено на Python по механизмам обработки исключений по умолчанию.
usingnamespaceboost::python;// Perform an extended slice of a Python list.// Warning: extended slicing was not supported for built-in types prior // to Python 2.3listodd_elements(listl){returnl[slice(_,_,2)];}// Perform a multidimensional extended slice of a Numeric.arraynumeric::arrayeven_columns(numeric::arrayarr){// select every other column, starting with the second, of a 2-D array.// Equivalent to "return arr[:, 1::2]" in Python.returnarr[make_tuple(slice(),slice(1,_,2))];}// Perform a summation over a slice of a std::vector.doublepartial_sum(std::vector<double>const&Foo,constsliceindex){slice::range<std::vector<double>::const_iterator>bounds;try{bounds=index.get_indices<>(Foo.begin(),Foo.end());}catch(std::invalid_argument){return0.0;}doublesum=0.0;while(bounds.start!=bounds.stop){sum+=*bounds.start;std::advance(bounds.start,bounds.step);}sum+=*bounds.start;returnsum;}
Статья boost/python/slice.hpp раздела Boost.Python Reference Manual Chapter 3. Object Wrappers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.