On 2007-11-29, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > I understand the parameters to Python functions are passed by > reference: > > def foo(a): > a = a + 1 > > Will change the value of a in the calling function. How do I > implement the equivalent in C when extending Python?
You've got the passing convention basically correct, but the semantcs of 'a + 1' wrong. 'a + 1' evaluates to a new integer object equal to a+1. Then the = binds the local a to that new integer. The object that the calling a refers to is never modified, and the name that is bound to it is not rebound. If you had modified the object that the local a was bound to, it would have the effect you are after. As it happens, some objects are immutable and thus cannot be modified. > I know how to write a function that can be called from Python > and I know how to use PyArg_ParseTuple to get the value of a. > But how do I update the value of a in C? I tried (greatly > simplified): You cannot do it. You'll have to insist on a boxed value of some kind, like one stored in a list or an object. Python equivalent: >>> def foo(x): ... x[0] = 'foo' ... >>> a = [0] >>> foo(a) >>> a ['foo'] -- Neil Cerutti -- http://mail.python.org/mailman/listinfo/python-list