On Oct 4, 2008, at 1:03 PM, Kevin Ar18 wrote:

> As I understand the Docs, you can't access c types, functions, or  
> classes in a module.

I'm not quite sure I understand your question, but I'll try to answer...

Python stores its module-level in a big dict. The speed gains of  
Cython are usually made by avoiding this dict storage (as well as the  
wrapping everything as an object that is required to do so).

> For example, this won't work:
>
>
> somemodule.pyx
>
> cdef int a = 1
> py_get():
>     return a
>
> somefile.pyx
>
> import somemodule
> cdef int b = somemodule.a

This won't, as a is not a Python object but a c global.

> print somemodule.py_get()

This should.

>
> or this:
>
> somemodule.pyx
>
> cdef extern from *:
>     int a = 1
> py_get():
>     return a
>
> somefile.pyx
>
> cimport somemodule
> cdef int b = somemodule.a

No, that won't either.

> So what do you do with modules that mix Cython and Python?

cdef classes live in both the C and Python namespace. cpdef functions  
are accessible from both C and Python as well. In this case, you  
probably need to just write

a = 1

and deal with it being a Python object so you can get at it from  
Python (and it is still accessible from C). Everything accessible  
from Python is also accessible from Cython.

We probably should support cimporting cdef'd global variables  
(probably with the same trick as we do for functions) and it would be  
nice to be able to declare variables as "public" or "readonly" as one  
can do with class attributes (though the only way I could see how to  
do it is the hack at http://mail.python.org/pipermail/python-list/ 
2007-January/422578.html or making a subtype of the module type)

- Robert

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to