Remembering the context

GZ zyzhu2000 at gmail.com
Wed Apr 28 10:31:27 CEST 2010


Hi All,

I am looking at the following code:

def fn():

    def inner(x):
         return tbl[x]

    tbl={1:'A', 2:'B'}
    f1 = inner   # I want to make a frozen copy of the values of tbl
in f1
    tbl={1:'C', 2:'D'}
    f2 = inner
   return (f1,f2)

f1,f2 = fn()
f1(1)  # output C
f2(1) # output C

What I want is for f1 to make a frozen copy of tbl at the time f1 is
made and f2 to make another frozen copy of tbl at the time f2 is made.
In other words, I want f1(1)=='A' and f2(1)=='C'.

One way to do this is to use functools.partial

def fn():

    def inner(tbl, x):
         return tbl[x]

    tbl={1:'A', 2:'B'}
    f1 = functools.partial(inner,tbl)   # I want to make a frozen copy
of the values of tbl in f1
    tbl={1:'C', 2:'D'}
    f2 = functools.partial(inner,tbl)
   return (f1,f2)

I am wondering if there is any other way to do this.



More information about the Python-list mailing list