self modifying code

John J. Lee jjl at pobox.com
Sat Apr 29 14:33:59 EDT 2006


Robin Becker <robin at NOSPAMreportlab.com> writes:

> When young I was warned repeatedly by more knowledgeable folk that self 
> modifying code was dangerous.
> 
> Is the following idiom dangerous or unpythonic?
> 
> def func(a):
>      global func, data
>      data = somethingcomplexandcostly()
>      def func(a):
>          return simple(data,a)
>      return func(a)

1. I don't think most people would call that "self-modifying code".  I
   won't try defining that term precisely because I know you'll just
   pick holes in my definition ;-)

2. The use of global func is just plain weird :-)

3. Peter Otten's version is OK, but how about this, using a closure
   instead of globals (UNTESTED)

def make_func():
    namespace = object()
    namespace.data = None
    def func(a):
        if namespace.data is None:
            namespace.data = somethingcomplexandcostly()
        return simple(namespace.data, a)
    return func
func = make_func()


John




More information about the Python-list mailing list