[Cython] How to define C-consts in python module scope

Robert Bradshaw robertwb at math.washington.edu
Wed Jul 20 01:48:05 CEST 2011

On Tue, Jul 19, 2011 at 3:02 PM, Lisandro Dalcin <dalcinl at gmail.com> wrote:
> On 19 July 2011 02:24, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>> 2011/7/18 Robert Bradshaw <robertwb at math.washington.edu>:
>>> Trevor King and I discussed this quite a while back, but every time I
>>> got around to looking at his code (I don't think he ever created a
>>> formal pull request) something came up. The idea was that we could
>>> support cpdef structs and extern functions as well.
>> That's interesting, I think I shouldn't hurry with my pull request.
>> 2011/7/19 Robert Bradshaw <robertwb at math.washington.edu>:
>>> On Mon, Jul 18, 2011 at 4:34 PM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
>>>> My suggestion is
>>>>  cdef exposed enum:
>>>>    ...
>>> I agree, public is an overloaded word. This meaning is analogous to
>>> its use for cdef class members. Perhaps we should use "api" for api
>>> generation, and public used for Python-level access, with cpdef being
>>> the preferred form for declaring Python-accessible types.
>> It seems to me that cpdef is more cythonic but exposed could be used
>> in this case:
>> cdef extern from "ev.h":
>>    exposed enum:
>>        EV_READ
>>        EV_WRITE
> And what about this?
> cdef extern from "ev.h":
>   cpdef enum:
>       EV_READ
>       EV_WRITE

Yep, exactly.

> BTW, how is this supposed to work with *.pxd files? I think the values
> will be exposed just in the matching implementation .pyx file, and not
> with cimport, right?

It would be an error unless there's an corresponding .pyx file (which
could be empty). The idea is that one could also define extern cpdef
functions and structs and wrappers would be provided.

- Robert

More information about the cython-devel mailing list