Type feedback tool?
skip at pobox.com
skip at pobox.com
Sun Oct 26 21:41:15 EDT 2008
(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
More information about the Python-list
mailing list