Thanks for the clarification Dag.

Cheers!

On Sat, Oct 10, 2009 at 4:38 PM, Dag Sverre Seljebotn
<[email protected]> wrote:
> Chris Colbert wrote:
>> for example if I have something like this:
>>
>> cimport numpy as np
>>
>> cdef void foo(np.ndarray arr):
>>             <do stuff>
>>
>>
>> def bar(np.ndarray arr):
>>        foo(arr)
>>
>>
>> is arr getting passed by value or by reference?
>>
> It's passed like any Python object, which is to say, by reference.
> Python objects are *always* passed by reference.
>
>> When I wrap other C libraries, I have to do a  foo(&cobject)  to pass
>> cobject by reference and have foo defined as:
>>
>> cdef foo(somectype* cobject):
>>         cobject.intvalue = 3
>>
>>
>> The reason I ask is because even though i'm not explicity passing the
>> numpy arrays by reference, I can still access the struct memember via
>> dotted notation (arr.strides[2] for example). Since Cython doesnt have
>> a -> operator, its not exactly clear what is going on here in this
>> situation.
>>
> Cython translates x.y to -> when x is either a typed Python extension
> type or a pointer, and keeps it as "." for a struct. This is less than
> ideal for speaking with C++ but keep in mind that Cython/Pyrex was
> designed for C where this simplification could be made.
>
> Dag Sverre
> _______________________________________________
> Cython-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/cython-dev
>
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to