В Python, учитывая имя функции, как получить все модули, содержащие эту функцию?

Например, есть os.path.walk , os.walk и предполагается другой md.walk , и предполагается, что os импортируется, но md – нет. Мне нужна функция, подобная

whereis('walk') 

а может возвращать os.path.walk , os.walk и md.walk .

Или, если трудно узнать, есть md.walk , как получить импортированный os.path.walk и os.walk ?

2 Solutions collect form web for “В Python, учитывая имя функции, как получить все модули, содержащие эту функцию?”

Хорошо, это было весело, вот обновленное решение. Некоторая магия Python, решение для Python 2.7. Любые улучшения приветствуются. Он ведет себя как любой другой импорт, поэтому будьте осторожны, чтобы обернуть любой исполняемый код, if name == "__main__" .

 import inspect import pkgutil import sys def whereis_in_globals(fname): return [m for m in sys.modules.itervalues() if module_has_function(m, fname)] def whereis_in_locals(fname): modules = (__import__(module_name, globals(), locals(), [fname], -1) for _, module_name, _ in pkgutil.walk_packages(path=".")) return [m for m in modules if module_has_function(m, fname)] def module_has_function(m, fname): return hasattr(m, fname) and inspect.isfunction(getattr(m, fname)) if __name__ == "__main__": # these should never raise AttributeError for m in whereis_in_locals('walk'): m.walk for m in whereis_in_globals('walk'): m.walk 

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

Например, если вы устанавливаете PyCharm (доступно бесплатно в редакции сообщества), вы можете ввести полное или частичное имя функции (только текстовую строку), а затем выполнить поиск в активном проекте IDE, чтобы увидеть, что вы ищете. Например, вы можете просто набрать «walk» на строке, а затем (IIR) щелкнуть по нему, чтобы увидеть, какие возможные модули могут иметь соответствующие функции. Вы также можете искать в другом направлении, видя, где в проекте используется функция.

Чтобы искать в широком масштабе, вам, возможно, придется немного обмануть и открыть свой каталог Python как «проект», но это легко.

Опять же, вы не предоставили прецедентов, поэтому приносите свои извинения, если вы специально ищете, например, в сценарии, чтобы получить этот результат для последующего использования в программе. Если это то, на что вы хотите получить ответ для вас, как разработчика, и когда вы работаете, вы можете посмотреть на инструменты, которые вы используете, чтобы дать ответ.

  • Как я могу сделать эту программу более эффективной?
  • Использование yield с несколькими ndb.get_multi_async
  • Можно ли просто передать конкретное сообщение в моей собственной сети на python?
  • Как я могу получить скрипт python (версия 2.5) для запуска файла jar внутри папки вместо командной строки?
  • Python 3.5 Ввод ABCMeta не определяет '__getitem__'
  • Ограничения python sys.argv?
  • Можно ли найти и удалить осиротевшие капли в блочном блоке приложения?
  • Как изменить предка записи NDB?
  • Python - лучший язык программирования в мире.