def ex_args(cls, f):
c = f.func_code
varnames_count, varnames_iter = c.co_argcount, iter(c.co_varnames)
args = tuple(itertools.islice(varnames_iter, varnames_count))
res = { a : v for v,a in zip(reversed(f.func_defaults or []), reversed(args)) }
try: starargs = next(varnames_iter) if c.co_flags & cls.CO_VARARGS else ""
except StopIteration: starargs = ""
try: kwdargs = next(varnames_iter) if c.co_flags & cls.CO_VARKEYWORDS else ""
except StopIteration: kwdargs = ""
return args, res, (starargs, kwdargs)
评论列表
文章目录