Carl Banks wrote: > Not so fast. You can get at the nested function by peeking inside code > objects (all bets off for Pythons other than CPython). > > import new > def extract_nested_function(func,name): > codetype = type(func.func_code) > for obj in func.func_code.co_consts: > if isinstance(obj,codetype): > if obj.co_name == name: > return new.function(obj,func.func_globals) > raise ValueError("function with name %s not found in %r" > % (name,func))
that doesn't give you the actual nested function, though; just another function object created from the same code object. and doing this right is a bit harder than you make it look; your code fails in somewhat confusing ways on straightforward things like: def outer(): def inner(arg="hello"): print arg inner() extract_nested_function(outer, "inner")() and def outer(): arg = "hello" def inner(): print arg inner() extract_nested_function(outer, "inner")() </F> -- http://mail.python.org/mailman/listinfo/python-list