G
GZ
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.
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.