Anonymus functions revisited

Duncan Booth duncan.booth at invalid.invalid
Wed Mar 23 05:13:16 EST 2005


George Sakkis wrote:

>> So then the question is ... is there a way for a function to create a
>> varable in it's parents namespace that persists after the function is
>> done?
> 
> Yeap.. a simple one-liner can do the trick:
> 
> def makeVars(**nameVals):
>     sys._getframe(1).f_locals.update(nameVals)
> 
> try: b
> except NameError: print "Before makeVars: NameError"
> else: print "Before makeVars: Not NameError"
> makeVars(b=2)
> try: b
> except NameError: print "After makeVars: NameError"
> else: print "After makeVars: Not NameError"

Do I really need to mention that the whole concept here is broken. This 
only works if you call it from global scope. If you call it from inside a 
function it [usually] won't work:

>>> def makeVars(**nameVals):
    sys._getframe(1).f_locals.update(nameVals)

    
>>> def test():
	try: b
	except NameError: print "Before makeVars: NameError"
	else: print "Before makeVars: Not NameError"
	makeVars(b=2)
	try: b
	except NameError: print "After makeVars: NameError"
	else: print "After makeVars: Not NameError"

	
>>> import sys
>>> test()
Before makeVars: NameError
After makeVars: NameError
>>> 



More information about the Python-list mailing list