parsing.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:pythonwhat 作者: datacamp 项目源码 文件源码
def parse_node(cls, node):
        normal_args = cls.get_arg_tuples(node.args.args, node.args.defaults)
        kwonlyargs = cls.get_arg_tuples(node.args.kwonlyargs, node.args.kw_defaults)
        # TODO: all single args should be tuples like this
        vararg = cls.get_arg(node.args.vararg)
        kwarg =  cls.get_arg(node.args.kwarg)
        # create context variables
        target_vars = [arg[0] for arg in normal_args]
        if vararg: target_vars.append(vararg)
        if kwarg:  target_vars.append(kwarg)

        args = cls.get_arg_parts(node.args.args, node.args.defaults, 'arg')
        kw_args = cls.get_arg_parts(node.args.kwonlyargs, node.args.kw_defaults, 'kwonly')
        varargs = cls.get_arg_part(node.args.vararg, None, 'vararg')
        kwargs = cls.get_arg_part(node.args.kwarg, None, 'kwarg')
        all_args = [*args, varargs, *kw_args, kwargs]

        if isinstance(node, ast.Lambda): body_node = node.body
        else: body_node = FunctionBodyTransformer().visit(ast.Module(node.body))

        return {
            "node": node,
            "name": getattr(node, 'name', None),
            "args": IndexedDict([ (p['name'], p) for p in all_args if p is not None]),
            # TODO: arg is the node counterpart to target_vars
            "_spec1_args": args,
            "*args": varargs,
            "**kwargs":  kwargs,
            "body": {'node': body_node, 
                     'target_vars': TargetVars(target_vars)}
        }
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号