Robin Becker <[EMAIL PROTECTED]> 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 -- http://mail.python.org/mailman/listinfo/python-list