I think that rope has something like that; not really sure though. On Mon, Oct 27, 2008 at 1:41 AM, <[EMAIL PROTECTED]> wrote: > > (Sorry for any repeated recommendations. I'm offline until Monday morning. > You may well see some of these suggestions in the meanwhile, but so far it > seems you've had no nibbles.) > > Martin> I'm wondering if there's a tool that can analyze a Python > Martin> program while it runs, and generate a database with the types of > Martin> arguments and return values for each function. > > Nothing that I'm aware of. Here are a few ideas though. > > 1. Modify the source code in question to decorate any functions you're > interested in, e.g.: > > #!/usr/bin/env python > > class ZeroDict(dict): > def __getitem__(self, key): > if key not in self: > return 0 > return dict.__getitem__(self, key) > > _argtypes = ZeroDict() > > def note_types(f): > "Decorator that keeps track of counts of arg types for various > functions." > def _wrapper(*args): > _argtypes[(f,) + tuple([type(a) for a in args])] += 1 > return f(*args) > return _wrapper > > @note_types > def fib(n): > if n < 0: > raise ValueError, "n < 0" > if n > 1: > return fib(n-1) + fib(n-2) > return 1 > > @note_types > def fib2(n): > "fib() that guarantees it is dealing with ints." > if n < 0: > raise ValueError, "n < 0" > n = int(n) > if n > 1: > return fib2(n-1) + fib2(n-2) > return 1 > > if __name__ == "__main__": > print "fib(5) ==", fib(5) > print "fib(4.0) ==", fib(4.0) > print "fib2(5) ==", fib2(5) > print "fib2(4.0) ==", fib2(4.0) > print _argtypes > > You can probably write a source transformation tool to decorate all > functions (or just use Emacs macros for a 99% solution which takes a lot > less time). > > 2. Look at tools like pdb. You might be able to add a new command to > decorate a function in much the same way that you might set a breakpoint > at a given function. > > 3. Take a look at IDEs with source (like IDLE). You might be able to coax > them into decorating functions then display the collected statistics when > you view the source (maybe display a tooltip with the stats for a > particular function). > > Skip > -- > http://mail.python.org/mailman/listinfo/python-list >
-- [EMAIL PROTECTED] http://orestis.gr -- http://mail.python.org/mailman/listinfo/python-list