Hello everyone,

I'm storing functions in a dictionary (this is basically for cooking up my own fancy schmancy callback scheme, mainly for learning purpose):

>>> def f2(arg):
...     return "f2 " + arg
...
>>>
>>> def f1(arg):
...     return "f1" + arg
...

>>> a={'1': f1, '2': f2}
>>>
>>> [ x[1](x[0]) for x in a.items() ]
['f11', 'f2 2']

Well, neat. Except if I change function definitions now, old functions are called. And rightly:

{'1': <function f1 at 0xb7f0ba04>, '2': <function f2 at 0xb7f0b9cc>}
>>> f1
<function f1 at 0xb7f0ba04>
>>>
>>> def f1(arg):
...     return "NEW f1 " + arg
...
>>> f1
<function f1 at 0xb7f0b994>

The address of function f1 has obviously changed on redefinition.

Storing value copies in a dictionary on assignment is a reasonable default behaviour.

However, in this particular case I need to specifically store _references to objects_ (e.g. f1 function), or should I say _labels_ (leading to objects)?

Of course, I can basically update the dictionary with a new function definition.

But I wonder, is there not a way _in general_ to specifically store references to functions/variables/first-class objects instead of copies in a dictionary?



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to