Рубрики
Без рубрики

Python AST – абстрактное синтаксическое дерево

Python AST, абстрактное синтаксическое дерево, Python AST пример, Python Paser, проверка кода Python, генератор синтаксического дерева, Python AST Exec, Python AST Eval, Python AST Dump, Python AST Module Trix Учебник.

Автор оригинала: Pankaj Kumar.

Абстрактное синтаксическое дерево очень сильные особенности в Python. Модуль Python AST позволяет нам взаимодействовать с самим кодом Python и изменять его.

Модуль Python AST

С модулем Python AST мы можем сделать много вещей, как модифицирующее код Python и проверять его. Код может быть проанализирован и изменен до того, как он скомпилирован на Bytecode форма. Важно понимать, что каждое абстрактное синтаксическое дерево представляет каждый элемент в нашем коде Python в качестве объекта. Мы подробно поймем это в грядущих разделах. Давайте попробуем настоящий код.

Режимы для компиляции кода

Как мы упомянули режим в последнем скрипте выше, есть три режима, в которых код Python может быть скомпилирован. Они есть:

  • exec : Мы можем выполнить нормальный код Python, используя этот режим.
  • Eval : Чтобы оценить выражения Python, этот режим вернет результат выражения после оценки.
  • одинокий : Этот режим работает так же, как Python Shell, которая выполняет одно утверждение за раз.

Выполнение кода

Мы можем использовать модуль AST для выполнения кода Python. Вот образец программы:

import ast

code = ast.parse("print('Hello world!')")
print(code)

exec(compile(code, filename="", mode="exec"))

Давайте посмотрим на вывод этой программы: Как упоминалось выше, мы использовали exec Режим здесь.

Оценка выражения Python

На основании второго режима, который мы упомянули выше, AST может использоваться для оценки экспрессии Python и получить ответ выражения. Давайте посмотрим на фрагмент кода:

import ast

expression = '6 + 8'
code = ast.parse(expression, mode='eval')

print(eval(compile(code, '', mode='eval')))

Давайте посмотрим на вывод для этой программы: также можно увидеть AST, который был сформирован для вышеуказанного выражения, просто добавьте эту строку с помощью надписания:

print(ast.dump(code))

Это то, что он дает:

Создание многострочных ASTS

До сих пор мы сделали единую строку ASTS и в последнем примере, мы также видели, как они смотрят с помощью свалки. Теперь мы сделаем преобразование многострочного Python Code для AST. Вот образец программы:

import ast

tree = ast.parse('''
fruits = ['grapes', 'mango']
name = 'peter'

for fruit in fruits:
    print('{} likes {}'.format(name, fruit))
''')

print(ast.dump(tree))

Давайте посмотрим на вывод этой программы: мы можем посетить каждый узел, изменяя сценарий:

import ast

class NodeVisitor(ast.NodeVisitor):
    def visit_Str(self, tree_node):
        print('{}'.format(tree_node.s))


class NodeTransformer(ast.NodeTransformer):
    def visit_Str(self, tree_node):
        return ast.Str('String: ' + tree_node.s)


tree_node = ast.parse('''
fruits = ['grapes', 'mango']
name = 'peter'

for fruit in fruits:
    print('{} likes {}'.format(name, fruit))
''')

NodeTransformer().visit(tree_node)
NodeVisitor().visit(tree_node)

Давайте посмотрим на вывод для этой программы: класс посетителей, который мы сделали выше, используемые методами, которые вызывают для каждого узла AST, тогда как с классом трансформатора, он сначала вызывает соответствующий метод узла и, наконец, заменяет его обратным значением способа. Мы можем выполнить методы здесь, добавив эту строку:

tree_node = ast.fix_missing_locations(tree_node)
exec(compile(tree_node, '', 'exec'))

Теперь вывод будет:

Когда использовать модуль Python AST?

Многие инструменты тестирования автоматизации, инструменты покрытия кода полагаются на питание абстрактных синтаксических деревьев для анализа исходного кода и найти возможные недостатки и ошибки в коде. Помимо этого, ASTS также используется в:

  • Сделать IDes Intelligent и делать функцию, которые все знают как Intellisense Отказ
  • Инструменты, такие как Pylint, использует AST для выполнения анализа статического кода
  • Пользовательские переводчики Python

Заключение

В этом уроке мы изучали модуль AST, который используется для оценки и изменения кода Python в вашей программе.

Ссылка: API док