Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import inspect
- tab = " "
- def print_module(mod, indent=1):
- lines = ["module: %s" % mod.__name__]
- for k, v in mod.__dict__.iteritems():
- if k.startswith("__"):
- continue
- line = format_any(v, name=k)
- if "\n" in line:
- line = "\n".join([tab * indent + _ for _ in line.split("\n")])
- lines.append(line)
- else:
- lines.append("%s%s" % (tab * indent, line))
- print "\n".join(lines)
- def format_class(klass):
- lines = ["class: %s" % klass.__name__]
- for k, v in klass.__dict__.iteritems():
- if k.startswith("__"):
- continue
- line = format_any(v, name=k)
- lines.append("%s%s" % (tab, line))
- return "\n".join(lines)
- def format_any(v, name=""):
- if inspect.isclass(v):
- return format_class(v)
- elif inspect.isfunction(v):
- return format_function(v)
- else:
- return "%s %s" % (name, repr(v))
- def format_function(v):
- args = inspect.getargspec(v)
- defaults = list(args.defaults if args.defaults else [])
- while len(defaults) != len(args.args):
- defaults.insert(0, None)
- l = ""
- for k, value in zip(args.args, defaults):
- if value is None:
- l += "%s, " % k
- else:
- l += "%s = %s, " % (k, value)
- if l.endswith(", "):
- l = l [:-2]
- if args.varargs:
- l += ", *%s" % args.varargs
- if args.keywords:
- l += ", **%s" % args.keywords
- return "%s(%s)" % (v.__name__, l)
- def print_function(v):
- print format_function(v)
- def print_class(v):
- for k, v in v.__dict__.iteritems():
- if k == "__builtins__":
- continue
- print k, format_any(v)
- import cProfile
- print_module(cProfile)
- import profile
- print_module(profile)
- if 0:
- def a():
- pass
- def b(x, y):
- pass
- def c(x, y=1, z=2):
- pass
- def d(x, y=1, z=2, *args):
- pass
- def e(x, y=1, z=2, *args, **kw):
- pass
- print_function(a)
- print_function(b)
- print_function(c)
- print_function(d)
- print_function(e)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement