Elliot Temple <[EMAIL PROTECTED]> writes:

> I want to write a function, foo, so the following works:
>
> def main():
>      n = 4
>      foo(n)
>      print n
>
> #it prints 7
>
> if foo needs to take different arguments, that'd be alright.
>
> Is this possible?

It is possible, but the more natural way would be to use function
return value:

   n = f(n)

or, if you need many assignments:

   a, b, c, d = f(a, b, c, d)

and, respectively:
   
   return a, b, c, d

in the function's body.

> I already tried this (below), which doesn't work.  foo only changes
> the global n.
>
>
> n = 3
> def main():
>      def foo(var, context, c2):
>          exec var + " = 7" in context, c2
>
>      n = 4
>      foo("n", locals(), globals())
>      print n
>
> if __name__ == '__main__': main()
>
> print n

You need to make 'n' globally visible.  See the 'global' keyword 
in Python user manual.

> And of course I tried:
>
>  >>> def inc(n):
> ...  n += 3
> ...
>  >>> a = 4
>  >>> inc(a)
>  >>> a
> 4

AFAIK inc is builtin function.  And builtin functions doesn't have to
be real functions, they can be just aliases to Python's VM bytecodes
or sets of bytecodes.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to