def get_local_arguments(fun, is_method=False):
"""Return the callers arguments and non-default keyword arguments.
Args:
fun: The function or method that is calling get_local_arguments.
is_method: True if this is a method with a self argument.
Returns:
A tuple of (list of arguments, list of non default keyword arguments)
"""
frame = inspect.currentframe().f_back
argvals = inspect.getargvalues(frame)
argspec = inspect.getargspec(fun)
lvals = argvals.locals
num_args = len(argspec.args) - len(argspec.defaults)
arg_names = argspec.args[0:num_args]
kwarg_names = argspec.args[num_args:]
args = [lvals[k] for k in arg_names]
kwargs_a = [(k, lvals[k], d) for (k, d) in zip(kwarg_names, argspec.defaults)]
kwargs = [(k, v) for (k, v, d) in kwargs_a if v != d]
if is_method: args = args[1:] # strip off the self argument
return (args, kwargs)
评论列表
文章目录