def filter_arguments(arguments, bound_argnames):
"""
Filters a node containing function arguments (an ``ast.arguments`` object)
to exclude all arguments with the names present in ``bound_arguments``.
Returns the new ``ast.arguments`` node.
"""
assert type(arguments) == ast.arguments
new_params = dict(ast.iter_fields(arguments))
new_params['args'], new_params['defaults'] = filter_arglist(
arguments.args, arguments.defaults, bound_argnames)
new_params['kwonlyargs'], new_params['kw_defaults'] = filter_arglist(
arguments.kwonlyargs, arguments.kw_defaults, bound_argnames)
vararg_name = arguments.vararg.arg if arguments.vararg is not None else None
kwarg_name = arguments.kwarg.arg if arguments.kwarg is not None else None
if vararg_name is not None and vararg_name in bound_argnames:
new_params['vararg'] = None
if kwarg_name is not None and kwarg_name in bound_argnames:
new_params['kwarg'] = None
return ast.arguments(**new_params)
评论列表
文章目录