Вы хотите написать "программу, которая находит все переменные". Я хотел предупредить вас заранее, что Python сделает это исключительно трудным, если вы заботитесь о тщательности. Если вы не , как будто вы просто ищете наиболее распространенный случай foo = "bar"
, хорошо: вы можете использовать что-то вроде ast.parse для поиска присвоений переменных, и это, вероятно, даст вам 99% пути.
Но если ваша цель - найти каждую переменную в модуле, рассмотрите этот фрагмент:
vars().update({"spam": "eggs"})
print(spam)
Подход поиска переменных не обнаружит этого. Также учтите, что для данного модуля могут быть установлены переменные с помощью других вещей:
>>> import requests
>>> requests.spam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'requests' has no attribute 'spam'
>>> setattr(requests, 'spam', 'eggs')
>>> requests.spam
'eggs'
Это не редкость для модулей, которые служат хранилищем для параметров конфигурации и тому подобного.