GZ wrote:
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'.

something like

def makeInner(a_tbl):
   def inner(x):
       return a_tbl[x]
   return inner

def fn():
   tbl = {1:'A', 2:'B'}
   f1 = makeInner(tbl)
   tbl = {1:'C', 2:'D'}
   f2 = makeInner(tbl)
   return f1,f2

f1,f2 = fn()

In [4]: print f1(1)
A

In [5]: print f2(1)
C

JM

PS : smelling code anyway :o)
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to