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