Passing pointer to array from C to Python..and modifying same array in python?

J W jkpangtang at yahoo.com
Mon Jul 14 16:59:34 CEST 2003


Hi David (and all membors of this list):

Thank you so much for your advice.

I have a few follow-up questions.

1) when you say to  "have the C function construct a
new python object (i.e. the "wrapper")",
what type of python object would it be:  
PyLong, PyObject,  PyCobject (not exactly sure what
this is, but i've seen this in literature), or
something else?

2) When you say "
>    The get method should take self and the array
> index as paramaters and return the values in that
slot of the array",

Do I use the "PyArg_ParseTuple" funciton call in the
"get()" method? If so, what parameters am I using to
indicate object type?
Is it correct to assume that the keyword "_self_" is
actually seen in Python, and not the C extension
object?
In the C- extension function, what type of object is 
"_self_" -- PyLong, PyObject?  


Thanks again


--- David Jeske <jeske at chat.net> wrote:
> On Fri, Jul 11, 2003 at 02:06:10PM -0700, JW wrote:
> > I have an array (presumably 'large') that is
> mallocced in a C
> > function and its values are initialized in that
> same function.  I
> > would like to pass just the pointer to the
> beginning of the array
> > from this C function to a Pyton function.  Then
> the python method
> > can individually access and MODIFY individual
> members of the array.
> > After the call to the python method, the C
> function will see any
> > changes to the array.
> 
> > Can this be done?
> 
> Of course this can be done, and there are a number
> of ways to do
> it. Based on your implication that there are many
> more values put in
> the array by the C code than will be accessed (or
> changed) by the
> Python code, this method might make sense:
> 
> 1) have the C function construct a new python object
> (i.e. the "wrapper")
> 
> 2) put the real pointer to the C array into the
> wrapper as instance data
> 
> 3) register two methods for the object "get()" and
> "set()", impelemented
>    in C as Python exported functions.
> 
>    The get method should take self and the array
> index as paramaters and
>    return the values in that slot of the array
> 
>    The set method should take self, an index, and
> the values as paramaters
>    and it should modify the real "C-version" of the
> array.
> 
> 4) when you execute your python function, it will be
> given this
>    "wrapper" object as a paramater. It can then call
> into the methods in 
>    the wrapper object to access and change the
> C-array "in-place" without
>    converting it at all. Each new value which is set
> into the array
>    is converted on the fly.
> 
> 5) If you like, you can convert get() and set() to
> __get__() and __set__
>    so you can use array access syntax to access the
> array from python.
> 
> 
> -- 
> David Jeske (N9LCA) + http://www.chat.net/~jeske/ +
jeske at chat.net


__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com





More information about the Python-list mailing list