On Wed, Dec 31, 2008 at 3:30 AM, iu2 <isra...@elbit.co.il> wrote: > Hi, > > Is it possible somehow to change a varible by passing it to a > function? > > I tried this: > > def change_var(dict0, varname, val): > dict0[varname] = val > > > def test(): > a = 100 > change_var(locals(), 'a', 3) > print a > > > But test() didn't work, the value a remains 100.
Yes, that's clearly stated in the documentation for locals(); from http://docs.python.org/library/functions.html#locals : "Warning: The contents of this dictionary should not be modified; changes may not affect the values of local variables used by the interpreter." > > I have several variables initialized to None. > I need to convert each one of them an object only if it is None. > something like: > > if not var1: var1 = MyObject() That should be: if var1 is None: var1 = MyObject() Otherwise, the "conversion" will also happen if var1 happens to be a false but non-None object, e.g. {}, [], 0, etc Also, it's just the idiomatic way of writing tests against None in Python. > > I want this to be a function, that is: > > def create_obj(var): > if not var: var = MyObj() > # set properties of var > > Now, I know I can achieve this by functional programming, > > def create_obj(var): > if not var: > x = MyObj() > # set properties of x > return x > return var > > and then > > var = creaet_obj(var) > > Is there another way? Not really, or at the very least it'll be kludgey. Python uses call-by-object (http://effbot.org/zone/call-by-object.htm), not call-by-value or call-by-reference. Could you explain why you have to set so many variables to the same value (if they're None)? It's a bit strange and could be a sign that there's a better way to structure your program (e.g. use a dictionary). We might be able to offer more helpful suggestions if you explain. Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com -- http://mail.python.org/mailman/listinfo/python-list