Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

boost/python/slice.hpp

Boost , Boost.Python Reference Manual , Chapter 3. Object Wrappers

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Exposes a TypeWrapper для Python slice тип.

Экспонирует расширенный протокол резки путем обертывания встроенного типа ломтика. Семантика конструкторов и функций-членов, определенных ниже, может быть полностью понята путем прочтения понятия TypeWrapper. Поскольку slice публично происходит от объект, публичная объект интерфейс применяется к slice экземплярам.

namespace boost { namespace python
{
  class slice : public object
  {
   public:
      slice(); // create an empty slice, equivalent to [::]
      template <typename Int1, typename Int2>
      slice(Int1 start, Int2 stop);
      template <typename Int1, typename Int2, typename Int3>
      slice(Int1 start, Int2 stop, Int3 step);
      // Access the parameters this slice was created with.
      object start();
      object stop();
      object step();
      // The return type of slice::get_indices()
      template <typename RandomAccessIterator>
      struct range
      {
          RandomAccessIterator start;
          RandomAccessIterator stop;
          int step;
      };
      template <typename RandomAccessIterator>
      range<RandomAccessIterator>
      get_indices(
          RandomAccessIterator const& begin,
          RandomAccessIterator const& end);
  };
}}
slice();

Effects

конструирует срез по умолчанию стоп, запуска и шаговых значений. Эквивалент к объекту среза, созданному как часть выражения Python base[::].

Throws

ничего

template <typename Int1, typename Int2>
slice(Int1 start, Int2 stop);

Requires

start, stop, и step имеют тип slice_nil или конвертируемый в тип объект.

Effects

конструирует новый кусок с по умолчанию ступенчатым значением и предоставленными значениями запуска и остановки. Эквивалент к объекту среза, созданному встроенной функцией Python slice(start,stop), или как часть выражения Python base[start:stop>.

Throws

error_already_set и устанавливает исключение типа Python, если невозможно преобразование из аргументов в тип объекта.

template <typename Int1, typename Int2, typename Int3>
slice(Int1 start, Int2 stop, Int3 step);

Requires

start, stop, и step являются slice_nil или конвертируемыми в тип объект.

Effects

конструирует новый срез с стартовыми остановками и шагами. Эквивалент к объекту среза, созданному встроенной функцией Python slice(start,stop,step), или как часть выражения Python base[startостановкаостановка:step>.

Throws

error_already_set и устанавливает исключение типа Python, если невозможно преобразование из аргументов в тип объекта.

object slice::start() const;
object slice::stop() const;
object slice::step() const;

Effects

Нет

Throws

ничего

Returns

параметр, с которым был создан срез. Если параметр был опущен или slice_nil был использован при создании среза, то этот параметр будет ссылкой на PyNone и сравниваться с по умолчанию построенным объектом. В принципе, любой объект может быть использован при создании объекта среза, но на практике они обычно являются целыми.

template <typename RandomAccessIterator>
slice::range<RandomAccessIterator>
slice::get_indices(
    RandomAccessIterator const& begin,
    RandomAccessIterator const& end) const;

Arguments

Пара 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 по механизмам обработки исключений по умолчанию.

using namespace boost::python;
// Perform an extended slice of a Python list.
// Warning: extended slicing was not supported for built-in types prior 
// to Python 2.3
list odd_elements(list l)
{
    return l[slice(_,_,2)];
}
// Perform a multidimensional extended slice of a Numeric.array
numeric::array even_columns(numeric::array arr)
{
    // select every other column, starting with the second, of a 2-D array.
    // Equivalent to "return arr[:, 1::2]" in Python.
    return arr[make_tuple( slice(), slice(1,_,2))];
}
// Perform a summation over a slice of a std::vector.
double partial_sum(std::vector<double> const& Foo, const slice index)
{
    slice::range<std::vector<double>::const_iterator> bounds;
    try {
        bounds = index.get_indices<>(Foo.begin(), Foo.end());
    }
    catch (std::invalid_argument) {
        return 0.0;
    }
    double sum = 0.0;
    while (bounds.start != bounds.stop) {
        sum += *bounds.start;
        std::advance( bounds.start, bounds.step);
    }
    sum += *bounds.start;
    return sum;
}

PrevUpHomeNext

Статья boost/python/slice.hpp раздела Boost.Python Reference Manual Chapter 3. Object Wrappers может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 3. Object Wrappers ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:53:44/0.0046741962432861/0