• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python ast.walk函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Python中ast.walk函数的典型用法代码示例。如果您正苦于以下问题:Python walk函数的具体用法?Python walk怎么用?Python walk使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了walk函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

示例1: _log_function

def _log_function(item):
    """
    Handler function for log message types.

    :param item: ast object being inspected for certain properties
    :type item: :class:`~ast.AST`
    :return: Returns the descriptor and arg offset of the item.
    :rtype: tuple (str, int)
    """
    level_arg = item.args[0]
    if isinstance(level_arg, ast.Str):
        level = level_arg.s.lower()
    else:
        any_call_or_name_elements = any(
            isinstance(element, (ast.Call, ast.Name))
            for element in ast.walk(level_arg)
        )
        if any_call_or_name_elements:
            level = "(dynamic)"
        else:
            level = ', '.join(
                element.s.lower()
                for element in ast.walk(level_arg)
                if isinstance(element, ast.Str)
            )
    integer_arg_offset = 1
    return level, integer_arg_offset
开发者ID:Arelle,项目名称:ArelleBuilder,代码行数:27,代码来源:generate_messages_catalog.py


示例2: ast_equal

def ast_equal(code1, code2, check_line_col=False, ignore_var_names=False):
    """
    Checks whether ast nodes are equivalent recursively.

    By default does not check line number or col offset
    """
    gen1 = ast.walk(code1)
    gen2 = ast.walk(code2)

    for node1, node2 in zip_longest(gen1, gen2):
        # unequal length
        if node1 is None or node2 is None:
            return False

        if type(node1) != type(node2):
            return False

        # ignore the names of load name variables.
        if ignore_var_names and is_load_name(node1) and is_load_name(node2):
            continue

        if not ast_field_equal(node1, node2):
            return False

        if check_line_col and hasattr(node1, 'lineno'):
            if node1.lineno != node2.lineno:
                return False
            if node1.col_offset != node2.col_offset:
                return False

    return True
开发者ID:dalejung,项目名称:asttools,代码行数:31,代码来源:__init__.py


示例3: nestable_lines

    def nestable_lines(self):
        """ Return the range of lines that are nestable.

        Parse the tree for all start and end lines of a nestable group (e.g. a
        function defintion or if statement). For each, return a tuple of the
        start and end line number.

        """

        nests = []
        nodes = [ast.walk(node) for node in self._tree.body]
        for node in nodes:
            end = 0
            for subnode in node:
                if isinstance(subnode, (ast.FunctionDef, ast.ClassDef, ast.If,
                                        ast.For, ast.TryExcept,
                                        ast.TryFinally)):
                    end = 0
                    for subsubnode in ast.walk(subnode):
                        try:
                            lineno = subsubnode.lineno
                        except AttributeError:
                            pass
                        else:
                            if lineno > end:
                                end = lineno
                    nests.append((subnode.lineno, end))
        return nests
开发者ID:liasis,项目名称:introspector,代码行数:28,代码来源:parse.py


示例4: hy_eval

def hy_eval(hytree, namespace, module_name):
    foo = HyObject()
    foo.start_line = 0
    foo.end_line = 0
    foo.start_column = 0
    foo.end_column = 0
    replace_hy_obj(hytree, foo)

    if not isinstance(module_name, string_types):
        raise HyTypeError(foo, "Module name must be a string")

    _ast, expr = hy_compile(hytree, module_name, get_expr=True)

    # Spoof the positions in the generated ast...
    for node in ast.walk(_ast):
        node.lineno = 1
        node.col_offset = 1

    for node in ast.walk(expr):
        node.lineno = 1
        node.col_offset = 1

    if not isinstance(namespace, dict):
        raise HyTypeError(foo, "Globals must be a dictionary")

    # Two-step eval: eval() the body of the exec call
    eval(ast_compile(_ast, "<eval_body>", "exec"), namespace)

    # Then eval the expression context and return that
    return eval(ast_compile(expr, "<eval>", "eval"), namespace)
开发者ID:ALSchwalm,项目名称:hy,代码行数:30,代码来源:importer.py


示例5: ast_transform

def ast_transform(root):
    parent_node = None
    dt_class_names = set(c.__name__ for c in (DateTime, Date, Duration))

    str_nodes = []
    for node in ast.walk(root):
        try:
            if isinstance(node, ast.Str):
                if isinstance(parent_node, ast.Name) and parent_node.id in dt_class_names:
                    pass
                else:
                    str_nodes.append(node)
        finally:
            parent_node = node
    nt = DTNodeTransformer(str_nodes)
    nt.visit(root)
    ast.fix_missing_locations(root)
    prev_lineno, prev_col_offset = 1, 0
    for n in ast.walk(root):
        if not hasattr(n, 'lineno'):
            n.lineno = prev_lineno
        else:
            prev_lineno = n.lineno
        if not hasattr(n, 'col_offset'):
            n.col_offset = prev_col_offset
        else:
            prev_col_offset = n.col_offset
开发者ID:simone-campagna,项目名称:dtcalc,代码行数:27,代码来源:dt_ast.py


示例6: replace_variables

 def replace_variables(self):
     """Replace script variables in string values."""
     variables = {
         'SCRIPT_SOURCE': self.source_script,
         'SCRIPT_NAME': self.script_name,
         'SCRIPT_PATH': self.script_path,
         'SCRIPT_AUTHOR': 'Sebastien Helleu',
         'SCRIPT_VERSION': '1.0',
         'SCRIPT_LICENSE': 'GPL3',
         'SCRIPT_DESCRIPTION': ('%s scripting API test' %
                                self.language.capitalize()),
         'SCRIPT_LANGUAGE': self.language,
     }
     # count the total number of tests
     tests_count = 0
     for node in ast.walk(self.tree):
         if isinstance(node, ast.Call) and \
                 isinstance(node.func, ast.Name) and \
                 node.func.id == 'check':
             tests_count += 1
     variables['SCRIPT_TESTS'] = str(tests_count)
     # replace variables
     for node in ast.walk(self.tree):
         if isinstance(node, ast.Str) and \
                 node.s in variables:
             node.s = variables[node.s]
开发者ID:weechat,项目名称:weechat,代码行数:26,代码来源:testapigen.py


示例7: check_for_wrong_tuple

def check_for_wrong_tuple(tree, code, noqa):
    errors = []
    candidates = []
    for assign in ast.walk(tree):
        if not isinstance(assign, ast.Assign) or assign.lineno in noqa:
            continue
        elif isinstance(assign.value, ast.Call):
            continue
        for tuple_el in ast.walk(assign):
            if isinstance(tuple_el, ast.Tuple) and len(tuple_el.elts) == 1:
                candidates.append((assign.lineno, assign.col_offset))
                break
    if not candidates:
        return []
    for candidate in candidates:
        tokens = tokenize.generate_tokens(lambda L=iter(code): next(L))
        for t in tokens:
            x = TokenInfo(*t)
            if x.start[0] != candidate[0]:
                continue
            if x.type == token.OP and x.string == "=":
                x = TokenInfo(*next(tokens))
                if x.type != token.OP and x.string != "(":
                    x_next = TokenInfo(*next(tokens))
                    if x_next.type == token.OP and x_next.string == ",":
                        errors.append(x.start)
    return errors
开发者ID:ar4s,项目名称:flake8_tuple,代码行数:27,代码来源:flake8_tuple.py


示例8: parse

    def parse(self, source, filename="source"):
        self.clear()
        self.filename = filename
        data = ast.parse(source, filename)
        for a in ast.walk(data):
            if isinstance(a, _ast.Assign) and isinstance(a.targets[0], _ast.Name):
                name = a.targets[0].id
                if name == self.stored_dict_name:
                    if isinstance(a.value, _ast.Dict):
                        for x in a.value.values:
                            if isinstance(x, _ast.Str):
                                self.stored_raw.append((x.s, x.lineno, x.col_offset))
                            else:
                                print "Error in %s:%d:%d: nonstring dict value" % (
                                    self.filename,
                                    x.lineno,
                                    x.col_offset,
                                )

        if not self.using_function:
            for a in ast.walk(data):
                if isinstance(a, _ast.Subscript) and isinstance(a.value, _ast.Name):
                    name = a.value.id
                    if name == self.retrieved_dict_name:
                        if hasattr(a.slice, "value") and isinstance(a.slice.value, _ast.Str):
                            x = a.slice.value
                            self.retrieved_raw.append((x.s, x.lineno, x.col_offset))
        else:
            for a in ast.walk(data):
                if isinstance(a, _ast.Call) and isinstance(a.func, _ast.Name):
                    name = a.func.id
                    if name == self.retrieved_dict_name:
                        if len(a.args) == 1 and isinstance(a.args[0], _ast.Str):
                            x = a.args[0]
                            self.retrieved_raw.append((x.s, x.lineno, x.col_offset))
                        else:
                            print "Suspicious use of '%s' in %s:%d:%d" % (
                                self.retrieved_dict_name,
                                self.filename,
                                a.lineno,
                                a.col_offset,
                            )

        for item in self.stored_raw:
            if item[0] in self.stored:
                self.stored[item[0]].append(item)
            else:
                self.stored[item[0]] = [item]

        for item in self.retrieved_raw:
            if item[0] in self.retrieved:
                self.retrieved[item[0]].append(item)
            else:
                self.retrieved[item[0]] = [item]

        s_set = set(self.stored.keys())
        r_set = set(self.retrieved.keys())
        self.missing = r_set - s_set
        self.redundant = s_set - r_set
开发者ID:Verlihub,项目名称:python,代码行数:59,代码来源:translation_check.py


示例9: translateFunctions

    def translateFunctions(self, tree):
        for node in ast.walk(tree):
            if isinstance(node, ast.FunctionDef):
                self.forwardDeclaration(node)

        for node in ast.walk(tree):
            if isinstance(node, ast.FunctionDef):
                self.visit(node)
开发者ID:TheGreatTook,项目名称:PLProjectCode,代码行数:8,代码来源:Translator.py


示例10: _find_last_line_for_class

def _find_last_line_for_class(source, classname):
    all_nodes = list(ast.walk(ast.parse(source)))
    classes = [n for n in all_nodes if isinstance(n, ast.ClassDef)]
    our_class = next(c for c in classes if c.name == classname)
    last_line_in_our_class = max(
        getattr(thing, 'lineno', 0) for thing in ast.walk(our_class)
    )
    return last_line_in_our_class
开发者ID:hjwp,项目名称:Book-TDD-Web-Dev-Python,代码行数:8,代码来源:write_to_file.py


示例11: read_setup_py

def read_setup_py(setup_py):
	requirements = set()
	tree = ast.parse(setup_py)
	for node in ast.walk(tree):
		arg = getattr(node, "arg", None)
		if arg in ("requires", "install_requires"):
			for node in ast.walk(node.value):
				if isinstance(node, ast.Str):
					requirements.add(read_package_name(node.s))
	return requirements
开发者ID:akx,项目名称:nocheese,代码行数:10,代码来源:nocheese.py


示例12: has_main

def has_main(filepath):
    with open(filepath, "r") as f:
        source = f.read()

    tree = ast.parse(source)

    first_level_ifs = (n for n in ast.walk(tree) if isinstance(n, _ast.If))

    strs_in_ifs = [n.s for _if in first_level_ifs for n in ast.walk(_if) if isinstance(n, _ast.Str)]

    return "__main__" in strs_in_ifs
开发者ID:josericardo,项目名称:runnablesearch,代码行数:11,代码来源:searcher.py


示例13: hy_eval

def hy_eval(hytree, namespace=None, module_name=None, ast_callback=None):
    """``eval`` evaluates a quoted expression and returns the value. The optional
    second and third arguments specify the dictionary of globals to use and the
    module name. The globals dictionary defaults to ``(local)`` and the module
    name defaults to the name of the current module.

       => (eval '(print "Hello World"))
       "Hello World"

    If you want to evaluate a string, use ``read-str`` to convert it to a
    form first:

       => (eval (read-str "(+ 1 1)"))
       2"""
    if namespace is None:
        frame = inspect.stack()[1][0]
        namespace = inspect.getargvalues(frame).locals
    if module_name is None:
        m = inspect.getmodule(inspect.stack()[1][0])
        module_name = '__eval__' if m is None else m.__name__

    foo = HyObject()
    foo.start_line = 0
    foo.end_line = 0
    foo.start_column = 0
    foo.end_column = 0
    replace_hy_obj(hytree, foo)

    if not isinstance(module_name, string_types):
        raise HyTypeError(foo, "Module name must be a string")

    _ast, expr = hy_compile(hytree, module_name, get_expr=True)

    # Spoof the positions in the generated ast...
    for node in ast.walk(_ast):
        node.lineno = 1
        node.col_offset = 1

    for node in ast.walk(expr):
        node.lineno = 1
        node.col_offset = 1

    if ast_callback:
        ast_callback(_ast, expr)

    if not isinstance(namespace, dict):
        raise HyTypeError(foo, "Globals must be a dictionary")

    # Two-step eval: eval() the body of the exec call
    eval(ast_compile(_ast, "<eval_body>", "exec"), namespace)

    # Then eval the expression context and return that
    return eval(ast_compile(expr, "<eval>", "eval"), namespace)
开发者ID:tuturto,项目名称:hy,代码行数:53,代码来源:importer.py


示例14: compare

    def compare(self):
        if not self.solution.strip():
            return False

        try:
            root = ast.parse(self.solution)
        except:
            return False

        soln_nodes = [ type(n).__name__ for n in ast.walk(root) ]
        key_nodes = [ type(n).__name__ for n in ast.walk(ast.parse(self.answer_key)) ]
        
        return soln_nodes == key_nodes
开发者ID:chriszf,项目名称:drillsergeant,代码行数:13,代码来源:model.py


示例15: fix_linenumbers_ast

 def fix_linenumbers_ast(self, tree):
     # Hack because of Python bug(?).  When creating the tree, some nodes do 
     # not have the _attributes field.
     for node in ast.walk(tree):
         if not hasattr(node, '_attributes'):
             node._attributes = ()
     
     tree = ast.fix_missing_locations(tree)
     
     for node in ast.walk(tree):
         if isinstance(node, (ast.stmt, ast.expr)):
             node.lineno -= 1
     
     return tree
开发者ID:bmbouter,项目名称:CeleryManagement,代码行数:14,代码来源:parser.py


示例16: test_roundtrip

 def test_roundtrip(cls, source=None):
     if source is None: # pragma: no cover
         try:
             source = inspect.getsource(mnfy)
         except IOError:
             pass
     original_ast = ast.parse(source)
     minifier = mnfy.SourceCode()
     minifier.visit(original_ast)
     minified_source = str(minifier)
     minified_ast = ast.parse(minified_source)
     node_pairs = zip(ast.walk(minified_ast), ast.walk(original_ast))
     for minified, original in node_pairs:
         cls.compare_ast_nodes(minified, original)
     return minified_source
开发者ID:DulithaRanatunga,项目名称:victims-lib-python,代码行数:15,代码来源:test_mnfy.py


示例17: checkBody

 def checkBody(self, funcdef):
     for bodyNode in funcdef.body:
         for node in ast.walk(bodyNode):
             if isinstance(node, ast.Attribute):
                 if isinstance(node.value, ast.Name):
                     if node.value.id != funcdef.args.args[0].id:
                         self.problem("Model variable '{0}' is used in the rule, but this variable is not first argument in the rule argument list".format(node.value.id), lineno=funcdef.lineno)
开发者ID:Juanlu001,项目名称:pyomo,代码行数:7,代码来源:rule.py


示例18: _sympify_string

def _sympify_string(math_string):
    "Convert math string into SymPy object."
    # drop pound symbols ('#') since they denote function names
    # we detect those automatically
    expr_string = math_string.replace('#', '')
    # sympify doesn't recognize LN as ln()
    expr_string = \
        re.sub(r'(?<!\w)LN(?!\w)', 'ln', expr_string, flags=re.IGNORECASE)
    expr_string = \
        re.sub(r'(?<!\w)EXP(?!\w)', 'exp', expr_string,
               flags=re.IGNORECASE)
    # Convert raw variables into StateVariable objects
    variable_fixes = {
        Symbol('T'): v.T,
        Symbol('P'): v.P,
        Symbol('R'): v.R
    }
    # sympify uses eval, so we need to sanitize the input
    nodes = ast.parse(expr_string)
    nodes = ast.Expression(nodes.body[0].value)

    for node in ast.walk(nodes):
        if type(node) not in _AST_WHITELIST: #pylint: disable=W1504
            raise ValueError('Expression from TDB file not in whitelist: '
                             '{}'.format(expr_string))
    return sympify(expr_string).xreplace(variable_fixes)
开发者ID:hastelloy,项目名称:pycalphad,代码行数:26,代码来源:tdb.py


示例19: parse

def parse(codingrule, _seen=()):
    """
    Parse a condition of a codingrule. Returns a dictionary with the first node of the
    AST generated from `codingrule.condition`.

    Each node represented as a dict contains a key "type", which indicates which type
    of node it is. This must be one of OR, AND, NOT, EQUALS and NOT_EQUALS. All nodes
    (excluding NOT) contain a key 'values' which is a list of operands. Not only has one
    operand, which is held in 'value'.

    Each node NOT represented as a dict must be a CodingSchemaField, Code, str or int. A
    CodingSchemaField is always on the left side of an equation and compared to either a
    Code, str or int. 

    All CodingRule's will be replaced be their condition and parsed.

    @raises: SyntaxError, CodingSchemaField.DoesNotExist, Code.DoesNotExist
    @returns: root of tree, or None if condition is empty
    """
    tree = ast.parse("({})".format(codingrule.condition)).body[0]

    # This function can be called from parse_node if the condition refers to another
    # codingrule. Keeping _seen prevents infinite loops when parsing.
    if codingrule in _seen:
        raise SyntaxError("Recursion: condition can't contain itself.")

    # Not all nodes from the Python language are supported
    for node in ast.walk(tree):
        if node.__class__ not in KNOWN_NODES or (isinstance(node, ast.Compare) and len(node.ops) > 1):
            if hasattr(node, "col_offset"):
                raise SyntaxError("invalid syntax (col {}, line {})".format(node.col_offset, node.lineno))
            raise SyntaxError("invalid syntax")

    return parse_node(tree, _seen=_seen + (codingrule,))
开发者ID:BBie,项目名称:amcat,代码行数:34,代码来源:codingruletoolkit.py


示例20: parse_module_imports

def parse_module_imports(root_name, module):
    """Parse a python module for all 'import' statements and extract the

    :param root_name: the name of the module being scanned
    :param module: the source of a python module
    :returns: all modules imported
    :rtype: `nx.DiGraph`

    """
    D = Dependencies()
    D.add_root(root_name)

    tree = ast.parse(module)
    for node in ast.walk(tree):

        if type(node) is ast.Import:
            for child in node.names:
                name = child.name
                D.add_submodule(root_name, name)

        elif type(node) is ast.ImportFrom:
            # relative imports (from . import <name1>, <name2>, ...)
            # the "module" attribute is None
            if node.module is not None:
                D.add_submodule(root_name, node.module)

            for name in node.names:
                D.add_subattribute(node.module, name.name)


        else:
            continue

    return D
开发者ID:badi,项目名称:noodles,代码行数:34,代码来源:imports.py



注:本文中的ast.walk函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python ast.Node类代码示例发布时间:2022-05-24
下一篇:
Python ast.parse函数代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap