storing references instead of copies in a dictionary
bgeddy
bgeddy at home.havin.a.break
Thu Jul 17 10:47:34 EDT 2008
mk wrote:
> Calvin Spealman wrote:
>> To your actual problem... Why do you wanna do this anyway? If you want
>> to change the function in the dictionary, why don't you simply define
>> the functions you'll want to use, and change the one you have bound to
>> the key in the dictionary when you want to change it? In other words,
>> define them all at once, and then just d['1'] = new_f1. What is wrong
>> with that?
>
> Well, basically nothing except I need to remember I have to do that.
>
> Suppose one does that frequently in a program. It becomes tedious. I
> think I will define some helper function then:
>
> >>> def helper(fundict, newfun):
> ... fundict[newfun.func_name] = newfun
> ...
>
> _If_ there were some shorter and still "proper" way to do it, I'd use
> it. If not, no big deal.
>
>> For completeness:
>>
>> def new_f1(arg):
>> return "NEW f1 " + arg
>> f1.func_code = new_f1.func_code
>>
>> Don't use that unless you really have to and I nearly promise that you
>> don't.
>
> I promise I won't use it. :-) It seems like a 'wrong thing to do'.
>
>
Well it's probably totally "non pythonic" but this does what you want:
def f2(arg):
return "f2 "+arg
def f1(arg):
return "f1 "+arg
a={"1":"f1","2":"f2"}
print [eval(x[1])(x[0]) for x in a.items()]
def f2(arg):
return "New f2 "+arg
print [eval(x[1])(x[0]) for x in a.items()]
Don't know if this is any use to you..
More information about the Python-list
mailing list