Пожалуйста, поправьте меня, если я ошибаюсь, но я скажу что-нибудь с АСТ, вероятно, здесь излишним. Не является ли переменная чем-то, что появляется слева от оператора присваивания?
Редактировать: читать руководство здесь и здесь
Казалось бы, «переменные» - это конкретный экземпляр идентификаторов, к которым могут быть привязаны значения. В контексте модели исполнения Python они известны как «объекты», которые связаны с «именами».
Если имя связано в блоке, это локальная переменная этого блока.
Если имя связано на уровне модуля, это глобальная переменная. (The
переменные блока кода модуля являются локальными и глобальными.) Если
переменная используется в блоке кода, но там не определена, она свободна
переменная.
А вот сладкое (мой акцент):
Следующие конструкции связывают имена: формальные параметры с функциями,
import инструкции, определения классов и функций (они связывают
имя класса или функции в определяющем блоке) и цели, которые
идентификаторы, если они встречаются в присваивании , для цикла в заголовке
вторая позиция , за исключением заголовка предложения или после, как в с
заявление. Оператор импорта формы из ... import * binds
все имена, определенные в импортированном модуле, кроме тех, которые начинаются с
подчеркивание Эта форма может использоваться только на уровне модуля.
Так что, если вы можете покрыть эти базы, все готово! :)
Я предполагаю, что любой код, который вы анализируете, будет довольно элементарным кодом Python; в противном случае вы можете использовать AST, как указано выше.