简体   繁体   中英

How do I call global functions on Python objects?

I've seen this page: https://docs.python.org/3/c-api/object.html but there doesn't seem to be any way to call functions like long_lshift or long_or .

It's not essential to me to call these functions, I could also live with the more generic versions, although I'd prefer to call these. Anyways, is there any way to use these? What do I need to include? Below is some example code, where I'd like to use them (simplified):

size_t parse_varint(parse_state* state) {
    int64_t value[2] = { 0, 0 };
    size_t parsed = parse_varint_impl(state, value);
    PyObject* low = PyLong_FromLong(value[0]);
    PyObject* high;

    if (value[1] > 0) {
         high = PyLong_FromLong(value[1]);
         PyObject* shift = PyLong_FromLong(64L);
         PyObject* high_shifted = long_lshift(high, shift);
         state->out = long_or(low, high_shifted);
    } else {
        state->out = low;
    }
    PyObject_Print(state->out, stdout, 0);
    return 0;
}

I couldn't find these functions in documentation, but they appear to be exported in Python.h header:

  • PyNumber_Lshift is the replacement for long_shift in my code.
  • Similarly, PyNumber_Or is the replacement for long_or in my code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM